資源描述:
《實(shí)驗(yàn)七子查詢與聯(lián)合查詢實(shí)驗(yàn)指導(dǎo)》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、實(shí)驗(yàn)七子查詢與聯(lián)合查詢實(shí)驗(yàn)指導(dǎo)一、子查詢子查詢指在一個外層查詢屮包含另一個內(nèi)層查詢,即在一個SELECT語句屮的WHERE子句屮,包含有另一個SELECT語句,或者將一個SELECT語句作為另一個SELECT語句的新增列。外層的查詢成為主查詢,WHERE子句中包含的SELECT語句被稱為子查詢。一般將子查詢的查詢結(jié)果作為主查詢的查詢條件。子查詢也稱為嵌套查詢,可完成復(fù)雜的查詢操作。通常情況下,嵌套查詢都可以寫成連接的形式,但是有時候?qū)懗蛇B接形式比較復(fù)雜,不容易理解,因此將其寫成嵌套的形式,以將復(fù)雜的查詢分解成簡單的、易理解的子查詢。子查詢
2、與連接相比,由于子查詢的執(zhí)行需要增加一些附加的操作如排序等,而連接不需要增加附加操作,故一般情況下,連接優(yōu)于子查詢。使用子查詢時要注意以下幾點(diǎn)。(1)子查詢需要用()括起來。(2)子查詢內(nèi)可以再嵌套子查詢。(3)子查詢內(nèi)的SELECT語句不能使用imagestext>或ntext數(shù)據(jù)類型。(4)子查詢返回的結(jié)果值的數(shù)據(jù)類型必須兀配新增列或WHERE子句中的數(shù)據(jù)類型。1.子查詢作為新增列例1用子查詢顯示每個學(xué)生的平均分。SELECTa.sno,avg_Grade=(SELECTAVG(Grade)FROMscbWHEREa.sno=b.sn
3、o)FROMstudenta如果不用子查詢,可以用分組查詢。SELECTsno,AVG(Grade)asavg_GradeFROMscGROUPBYsno2.使用IN關(guān)鍵字語法格式為:WHERE表達(dá)式[NOT]IN(子查詢)說明:?IN表示屬于,即若表達(dá)式的值屬于子查詢返回的結(jié)果集屮的值,則滿足查詢條件。NOTIN表示不屬于。例2查詢與“劉晨”在同一個系學(xué)習(xí)的學(xué)生。SELECTSno,Sname,SdeptFROMStudentWHERESdeptIN(SELECTSdeptFROMStudentWHERE劉晨J1.使用比較運(yùn)算符語法格式
4、:WHERE表達(dá)式比較運(yùn)算符[ANYIALL](子查詢)ANY關(guān)鍵字表示任何一個(其中之一),只要與子查詢中一個值相符合即可;ALL關(guān)鍵字表示所有(全部),要求與子查詢中的所有值相符合。比較運(yùn)算符包扌舌:>、V、>=、v二、二、<>o例3找岀每個學(xué)生超過他選修課程平均成績的課程號。SELECTSnozCnoFROMSCxWHEREGrade>=(SELECTAVG(Grade)FROMSCyWHEREy?Sno=x?Sno)例4查詢其他系中比計(jì)算機(jī)系某一個學(xué)生年齡小的學(xué)生姓名和年齡。SELECTSname,SageFROMStudentW
5、HERESage'CS‘2.使用BETWEEN關(guān)鍵字語法格式:WHERE表達(dá)式1[NOT]BETWEEN(子查詢)AND表達(dá)式2WHERE表達(dá)式1[NOT]BETWEEN表達(dá)式2AND(子查詢)說明:?使用BETWEEN關(guān)鍵字,則查詢條件是表達(dá)式1的值必須介于子查詢結(jié)果與表達(dá)式2值之間;而使用NOTBETWEEN關(guān)鍵字則正好相反。例5找出每個學(xué)生的超過他選修課程平均成績且小于90分的課程號。SELECTSno,CnoFROMSCxWHE
6、REGradeBETWEEN(SELECTAVG(Grade)FROMSCyWHEREy?Sno=x.Sno)AND905.使用EXISTS關(guān)鍵字語法格式:WHERE[NOT]EXISTS(子查詢)說明:?EXISTS關(guān)鍵字表示存在雖詞,帶有EXISTS關(guān)鍵字的子查詢不返回任何數(shù)據(jù),只返回邏輯真值和邏輯假值。當(dāng)子查詢的結(jié)果不為空集時,返回邏輯真值,否則返冋邏輯假值。NOTEXISTS則與EXISTS查詢結(jié)果相反。例6查詢所有選修了1號課程的學(xué)生姓名。SELECTSnameFROMStudentWHEREEXISTS(SELECT*FROM
7、SCWHERESno=Student?SnoANDCno=111)例7查詢至少選修了學(xué)生200215122選修的全部課程的學(xué)生號碼。SELECTDISTINCTSnoFROMSCSCXWHERENOTEXISTS(SELECT*FROMSCSCYANDNOTEXISTS(SELECT*FROMSCSCZWHERESCZ.Sno=SCX.SnoANDSCZ.Cno=SCY.Cno))6.子?xùn)嗽兣c數(shù)據(jù)更新INSERT.UPDATE、DELETE這三種語句還能與子查詢結(jié)合,實(shí)現(xiàn)更加靈活的數(shù)據(jù)更新操作。(1)子查詢與INSERT語句。子查詢與IN
8、SERT語句相結(jié)合,可以完成一批數(shù)據(jù)的插入。語法格式為:INSERT[INTO]v表名〉[v列名表>]v子查詢〉(2)子查詢與UPDATE語句。子查詢與UPDATE語句相結(jié)合,一般是嵌在WHE