sql子查詢和嵌套查詢

sql子查詢和嵌套查詢

ID:11374788

大?。?28.00 KB

頁(yè)數(shù):8頁(yè)

時(shí)間:2018-07-11

sql子查詢和嵌套查詢_第1頁(yè)
sql子查詢和嵌套查詢_第2頁(yè)
sql子查詢和嵌套查詢_第3頁(yè)
sql子查詢和嵌套查詢_第4頁(yè)
sql子查詢和嵌套查詢_第5頁(yè)
資源描述:

《sql子查詢和嵌套查詢》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。

1、什么是嵌套查詢嵌套查詢是指在一個(gè)外層查詢中包含有另一個(gè)內(nèi)層查詢,即一個(gè)SQL查詢語(yǔ)句塊可以嵌套在另一個(gè)查詢塊的WHERE子句中。其中外層查詢稱為父查詢、主查詢。內(nèi)層查詢也稱為子查詢、從查詢。什么是子查詢子查詢是SELECT語(yǔ)句內(nèi)的另外一條SELECT語(yǔ)句,而且常常被稱為內(nèi)查詢或是內(nèi)SELECT語(yǔ)句。SELECT、INSERT、UPDATE或DELETE命令中允許是一個(gè)表達(dá)式的地方都可以包含子查詢,子查詢甚至可以包含在另外一個(gè)子查詢中。1.語(yǔ)法子查詢的句法如下:(SELECT[ALL

2、DISTINCT]FROM

3、[WHERE][GROUPBY[HAVING]])2.語(yǔ)法規(guī)則(1)子查詢的SELECT查詢總使用圓括號(hào)括起來(lái)。(2)不能包括COMPUTE或FORBROWSE子句。(3)如果同時(shí)指定TOP子句,則可能只包括ORDERBY子句。(4)子查詢最多可以嵌套32層,個(gè)別查詢可能會(huì)不支持32層嵌套。(5)任何可以使用表達(dá)式的地方都可以使用子查詢,只要它返回的是單個(gè)值。(6)如果某個(gè)表只出現(xiàn)在子查詢中而不出現(xiàn)在外部查詢

4、中,那么該表中的列就無(wú)法包含在輸出中。3.語(yǔ)法格式(1)WHERE查詢表達(dá)式[NOT]IN(子查詢)。(2)WHERE查詢表達(dá)式比較運(yùn)算符[ANY

5、ALL](子查詢)。(3)WHERE[NOT]EXISTS(子查詢)。簡(jiǎn)單嵌套查詢嵌套查詢內(nèi)層子查詢通常作為搜索條件的一部分呈現(xiàn)在WHERE或HAVING子句中。例如,把一個(gè)表達(dá)式的值和一個(gè)由子查詢生成的一個(gè)值相比較,這個(gè)測(cè)試類似于簡(jiǎn)單比較測(cè)試。子查詢比較測(cè)試用到的運(yùn)算符是:=、<>、<、>、<=、>=。子查詢比較測(cè)試把一個(gè)表達(dá)式的值和由子查詢的產(chǎn)生的一個(gè)值進(jìn)行比較,返回比較結(jié)果為TRUE的記錄

6、。下面在“student”表中,查詢“課程成績(jī)”>96分的同學(xué)信息。在查詢分析器中輸入的SQL語(yǔ)句如下:usestudentselect*fromstudentwhere學(xué)號(hào)=(select學(xué)號(hào)fromgradewhere課程成績(jī)>96)實(shí)現(xiàn)的過(guò)程如圖1所示。圖1成績(jī)大于90分的同學(xué)信息子查詢“select學(xué)號(hào)fromgradewhere課程成績(jī)>96”的查詢結(jié)果是“B003”,即是一個(gè)值。子查詢過(guò)程如下:(1)從“grade”表中查詢出“課程成績(jī)”>96的學(xué)生學(xué)號(hào)為“B003”。(2)從學(xué)生表中查詢出“學(xué)號(hào)”是“B003”的學(xué)生信息。帶I

7、N的嵌套查詢帶IN的嵌套查詢語(yǔ)法格式為:WHERE查詢表達(dá)式IN(子查詢)。一些嵌套內(nèi)層的子查詢會(huì)產(chǎn)生一個(gè)值,也有一些子查詢會(huì)返回一列值,即子查詢不能返回帶幾行和幾列數(shù)據(jù)的表。原因在于子查詢的結(jié)果必須適合外層查詢的語(yǔ)句。當(dāng)子查詢產(chǎn)生一系列值時(shí),適合用帶IN的嵌套查詢。把查詢表達(dá)式單個(gè)數(shù)據(jù)和由子查詢產(chǎn)生的一系列的數(shù)值相比較,如果數(shù)值匹配一系列值中的一個(gè),則返回TRUE。下面在“student”和“grade”表中,查詢參加考試的同學(xué)信息。在查詢分析器中輸入的SQL語(yǔ)句如下:usestudentselect*fromstudentwhere學(xué)號(hào)

8、in(select學(xué)號(hào)fromgrade)實(shí)現(xiàn)的過(guò)程如圖1所示。圖1參加考試的同學(xué)信息子查詢“select學(xué)號(hào)fromgrade”的結(jié)果如圖2所示。圖2子查詢結(jié)果子查詢生成“grade”表中學(xué)號(hào)列的數(shù)值,WHERE子句檢查主查詢記錄中的值是否與子查詢結(jié)果中的數(shù)值匹配,匹配返回TRUE值。由于主查詢記錄的“B006”的學(xué)號(hào)值與子查詢結(jié)果的數(shù)值不匹配,所以查詢結(jié)果不顯示學(xué)號(hào)為“B006”的記錄信息。帶IN的內(nèi)層嵌套還可以是多個(gè)值的列表。例如,查詢“年齡”是“22、21、24”的學(xué)生信息。SQL語(yǔ)句如下:usestudentselect*from

9、studentwhere年齡in(21,22,24)帶NOTIN的嵌套查詢NOTIN的嵌套查詢語(yǔ)法格式:WHERE查詢表達(dá)式NOTIN(子查詢)NOTIN和IN的查詢過(guò)程相類似。在“course”和“grade”表中,查詢沒(méi)有考試的課程信息。SQL語(yǔ)句如下:usestudentselect*fromcoursewhere課程代號(hào)notin(select課程代號(hào)fromgradewhere課程代號(hào)isnotnull)實(shí)現(xiàn)的過(guò)程如圖1所示。圖1沒(méi)有考試的課程信息查詢過(guò)程是用主查詢中“課程代號(hào)”的值與子查詢結(jié)果中的值比較,不匹配返回真值。由于主查

10、詢中的“k05”和“k06”的課程代號(hào)值與子查詢的結(jié)果的數(shù)據(jù)不匹配,返回真值。所以查詢結(jié)果顯示課程代號(hào)為“k05”和“k06”的課程信息。子查詢存在NULL值時(shí),避免使用NOTI

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。