版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
任課人:cws第4章
數(shù)據(jù)庫的基本應(yīng)用章節(jié)內(nèi)容4.1管理表4.2數(shù)據(jù)查詢4.3數(shù)據(jù)查詢?nèi)蝿?wù)實(shí)現(xiàn)4.4數(shù)據(jù)更新4.5數(shù)據(jù)更新任務(wù)實(shí)現(xiàn)4.6課堂實(shí)踐4.2數(shù)據(jù)查詢4.2.1單表無條件查詢4.2.2單表有條件查詢4.2.3聚集函數(shù)的使用4.2.4分組與排序4.2.5多表連接查詢4.2.6嵌套查詢4.2.7集合查詢4.2數(shù)據(jù)查詢學(xué)生成績管理系統(tǒng)中,肯定設(shè)計(jì)到包括學(xué)生基本信息瀏覽和查詢、成績查詢、各種數(shù)據(jù)的統(tǒng)計(jì)等內(nèi)容,如:這些操作應(yīng)該如何實(shí)現(xiàn)呢?4.2數(shù)據(jù)查詢數(shù)據(jù)查詢是數(shù)據(jù)庫中最常見的操作。SQL語言是通過SELECT語句來實(shí)現(xiàn)數(shù)據(jù)查詢的;基本語法如下:4.2.1單表無條件查詢1.語法格式SELECT[ALL|DISTINCT][TOPN[PERCENT]]<選項(xiàng)>[AS<顯示列名>][,<選項(xiàng)>[AS<顯示列名>][,...]]FROM<表名|視圖名>2.說明(1)
ALL:表示輸出所有記錄,包括重復(fù)記錄。默認(rèn)值為ALL。
DISTINCT:表示在查詢結(jié)果中去掉重復(fù)值。(2)
TOPN:返回查詢結(jié)果集中的前N行。
加[PERCENT]:返回查詢結(jié)果集中的前N%行。N的取值范圍是0~100(3)選項(xiàng):查詢結(jié)果集中的輸出列??蔀樽侄蚊?、表達(dá)式或函數(shù)。用“*”表示表中的所有字段。若選項(xiàng)為表達(dá)式或函數(shù),輸出的列名系統(tǒng)自動(dòng)給出,不是原字段名,故用AS重命名。(4)顯示列名:在輸出結(jié)果中,設(shè)置選項(xiàng)顯示的列名。用引號(hào)定界或不定界。(5)表名:要查詢的表。表不需打開,到當(dāng)前路徑下尋找表所對(duì)應(yīng)的文件。4.2.1單表無條件查詢1)查詢指定列【例4-6】查詢?nèi)w學(xué)生的學(xué)號(hào)和姓名?!纠?-7】查詢?nèi)w學(xué)生的姓名、學(xué)號(hào)、所在系。SELECTsno,snameFROMstudentSELECTsname,sno,sdeptFROMstudent4.2.1單表無條件查詢1)查詢指定列【例4-8】查詢選修了課程的學(xué)生學(xué)號(hào)(本例是對(duì)表4-12成績表sc的查詢)SELECTDISTINCTsnoFROMsc4.2.1單表無條件查詢2)查詢?nèi)苛小纠?-9】查詢?nèi)w學(xué)生的詳細(xì)記錄?!纠?-10】輸出學(xué)生表中的前10條記錄。SELECT*FROMstudentSELECTTOP10*FROMstudent思考:若是查詢前10%的記錄呢?4.2.1單表無條件查詢3)查詢經(jīng)過計(jì)算的列【例4-11】查詢?nèi)w學(xué)生的姓名及其年齡SELECTsname,YEAR(GETDATE())-YEAR(sbirthday)AS年齡FROMstudent4.2.1單表無條件查詢3)查詢經(jīng)過計(jì)算的列【例4-12】查詢?nèi)w學(xué)生的姓名、出生年份和所在系,要求用小寫字母表示所有系名,同時(shí)為姓名列指定別名為NAME,出生年份所在列指定別名為年份,系別所在列指定別名為系別。SELECTsnameNAME,'出生年份:'AS
生日,年份=YEAR(sbirthday),LOWER(sdept)系別FROMstudent注意:指定列名的3種方法,教材有誤!4.2.1單表無條件查詢3)查詢經(jīng)過計(jì)算的列【例4-13】將sc表中的學(xué)生成績?cè)黾?0%后輸出。SELECTsno,cno,degree*1.2as成績FROMSC4.2.1單表無條件查詢4.查詢結(jié)果的輸出Transact-SQL提供了一個(gè)擴(kuò)展特性,允許用戶使用SELECT語句查詢得到的結(jié)果記錄來創(chuàng)建一個(gè)新的數(shù)據(jù)表,創(chuàng)建新表使用INTO子句。INTO子句不能單獨(dú)使用,它包含在SELECT語句中。一般用于創(chuàng)建一個(gè)臨時(shí)表。INTO子句的語法格式如下:INTO<新表名>4.2.1單表無條件查詢4.查詢結(jié)果的輸出【例4-14】使用INTO子句創(chuàng)建一個(gè)新表,存放student表中的姓名和系別兩列。SELECTsname,sdept
INTOstudtempFROMStudent4.2.2單表有條件查詢1.語法格式SELECT[ALL|DISTINCT]<選項(xiàng)>[AS<顯示列名>][,<選項(xiàng)>[AS<顯示列名>][,...]]FROM<表名|視圖名>WHERE<條件表達(dá)式>4.2.2單表有條件查詢2.WHERE條件中的運(yùn)算符4.2.2單表有條件查詢1)比較運(yùn)算符使用比較運(yùn)算符實(shí)現(xiàn)對(duì)查詢條件進(jìn)行限定,其語法格式如下:WHERE
表達(dá)式1比較運(yùn)算符表達(dá)式2【例4-15】查詢所有男生的信息。SELECT*FROMstudentWHEREssex='男'4.2.2單表有條件查詢1)比較運(yùn)算符使用比較運(yùn)算符實(shí)現(xiàn)對(duì)查詢條件進(jìn)行限定,其語法格式如下:WHERE
表達(dá)式1比較運(yùn)算符表達(dá)式2【例4-16】查詢所有成績大于80分的學(xué)生的學(xué)號(hào)和成績。SELECTsnoAS'學(xué)號(hào)',degree'成績'FROMscWHEREdegree>804.2.2單表有條件查詢1)比較運(yùn)算符【例4-17】查詢所有男生的學(xué)號(hào)、姓名、系別及出生日期。【例4-18】查詢計(jì)算機(jī)系全體學(xué)生的名單。SELECTsno,sname,sdept,sbirthFROMstudentWHEREssex='男'SELECTsnameFROMstudentWHEREsdept='計(jì)算機(jī)系'4.2.2單表有條件查詢1)比較運(yùn)算符【例4-19】查詢考試成績不及格的學(xué)生的學(xué)號(hào)。SELECTDISTINCTsnoFROMscWHEREdegree<604.2.2單表有條件查詢2)邏輯運(yùn)算符WHERE子句中可以使用邏輯運(yùn)算符AND、OR和NOT,這3個(gè)邏輯運(yùn)算符可以混合使用。其語法格式如下:WHERENOT邏輯表達(dá)式|邏輯表達(dá)式1邏輯運(yùn)算符邏輯表達(dá)式4.2.2單表有條件查詢2)邏輯運(yùn)算符【例4-20】查詢計(jì)算機(jī)系女生的信息。【例4-21】查詢成績?cè)?0分以上或不及格的學(xué)生學(xué)號(hào)和課號(hào)信息。SELECT*FROMstudentWHEREsdept='計(jì)算機(jī)系'ANDssex='女'SELECTsno,cnoFROMscWHEREdegree>90ordegree<604.2.2單表有條件查詢2)邏輯運(yùn)算符【例4-22】查詢非計(jì)算機(jī)系的學(xué)生信息。SELECT*FROMstudentWHERENOTsdept='計(jì)算機(jī)系'或:SELECT*FROMstudentWHEREsdept<>'計(jì)算機(jī)系’4.2.2單表有條件查詢課堂練習(xí):4.2.2單表有條件查詢3)范圍運(yùn)算符(BETWEENAND)在WHERE子句中使用BETWEEN關(guān)鍵字查找在某一范圍內(nèi)的數(shù)據(jù),也可以使用NOTBETWEEN關(guān)鍵字查找不在某一范圍內(nèi)的數(shù)據(jù)。其語法格式如下:WHERE
表達(dá)式[NOT]BETWEEN
初始值A(chǔ)ND
終止值4.2.2單表有條件查詢3)范圍運(yùn)算符(BETWEENAND)【例4-23】查詢成績?cè)?0~70分之間的學(xué)生學(xué)號(hào)及成績。SELECTsno,degreeFROMscWHEREdegreeBETWEEN60AND70條件表達(dá)式的另一種表示方法是:degree>=60ANDdegree<=704.2.2單表有條件查詢4)字符匹配符(LIKE)在WHERE子句中使用字符匹配符LIKE或NOTLIKE可以把表達(dá)式與字符串進(jìn)行比較,從而實(shí)現(xiàn)對(duì)字符串的模糊查詢。其語法格式如下:WHERE
表達(dá)式[NOT]LIKE'字符串'[ESCAPE'換碼字符']通配符:%和_ESCAPE:字符串中本身含有%和_時(shí),對(duì)通配符進(jìn)行轉(zhuǎn)義。4.2.2單表有條件查詢4)字符匹配符(LIKE)通配符說明:4.2.2單表有條件查詢4)字符匹配符(LIKE)【例4-24】查詢所有姓李的學(xué)生的個(gè)人信息【例4-25】查詢生源地不是山東省的所有學(xué)生信息。SELECT*FROMstudentWHEREsnameLIKE'李%'SELECT*FROMstudentWHEREsaddressNOTLIKE'%山東省%'4.2.2單表有條件查詢4)字符匹配符(LIKE)【例4-26】查詢名字中第2個(gè)字為“陽”字的學(xué)生的姓名和學(xué)號(hào)?!纠?-27】查詢學(xué)號(hào)為“20050101”的學(xué)生姓名和性別。SELECTsname,snoFROMstudentWHEREsnameLIKE'_陽%‘SELECTsname,ssexFROMstudentWHEREsnoLIKE'20080322'4.2.2單表有條件查詢4)字符匹配符(LIKE)【例4-28】查詢DB_Design課程的課程號(hào)SELECTcnoFROMcourseWHEREcnameLIKE'DB\_Design'ESCAPE'\’4.2.2單表有條件查詢5)列表運(yùn)算符在WHERE子句中,如果需要確定表達(dá)式的取值是否屬于某一列表值之一時(shí),就可以使用關(guān)鍵字IN或NOTIN來限定查詢條件。其語法格式如下:WHERE
表達(dá)式[NOT]IN值列表4.2.2單表有條件查詢5)列表運(yùn)算符【例4-29】查詢信息系、軟件系和計(jì)算機(jī)系學(xué)生的姓名和性別。SELECTsname,ssexFROMstudentWHEREsdeptIN('計(jì)算機(jī)系','軟件系','信息系')4.2.2單表有條件查詢6)涉及空值的查詢當(dāng)數(shù)據(jù)表中的值為NULL時(shí),可以使用ISNULL關(guān)鍵字的WHERE子句進(jìn)行查詢,反之要查詢數(shù)據(jù)表的值不為NULL時(shí),可以使用ISNOTNULL關(guān)鍵字?;菊Z法格式為:WHERE
字段IS[NOT]NULL4.2.2單表有條件查詢6)涉及空值的查詢【例4-30】某些學(xué)生選修課程后沒有參加考試,所以有選修記錄,但沒有考試成績。查詢?nèi)鄙俪煽兊膶W(xué)生的學(xué)號(hào)和相應(yīng)的課程號(hào)?!纠?-31】查詢所有有成績的學(xué)生學(xué)號(hào)和課程號(hào)。SELECTsno,cnoFROMscWHEREdegreeISNULLSELECTsno,cnoFROMscWHEREdegreeISNOTNULL4.2.3聚集函數(shù)的使用SQLServer的聚集函數(shù)是綜合信息的統(tǒng)計(jì)函數(shù),也稱為聚合函數(shù)或集函數(shù),包括計(jì)數(shù)、求最大值、求最小值、求平均值和求和等。聚集函數(shù)可作為列標(biāo)識(shí)符出現(xiàn)在SELECT子句的目標(biāo)列或HAVING子句的條件中。4.2.3聚集函數(shù)的使用SQLServer的聚集函數(shù)在SQL查詢語句中,如果有GROUPBY子句,則語句中的函數(shù)為分組統(tǒng)計(jì)函數(shù);否則,語句中的函數(shù)為全部結(jié)果集的統(tǒng)計(jì)函數(shù)。4.2.2單表有條件查詢【例4-32】查詢學(xué)生總數(shù)。【例4-33】查詢選修了課程的學(xué)生人數(shù)。SELECTCOUNT(*)FROMstudentSELECTCOUNT(DISTINCTsno)FROMsc4.2.2單表有條件查詢【例4-34】計(jì)算C01號(hào)課程的學(xué)生平均成績?!纠?-35】查詢選修了C01號(hào)課程的學(xué)生最高分和最低分。SELECTAVG(degree)FROMscWHEREcno='C01'SELECTMAX(degree)最高分,MIN(degree)最低分FROMscWHEREcno='C01'4.2.2單表有條件查詢【例4-36】查詢學(xué)號(hào)為“20050101”的學(xué)生的總成績及平均成績。【例4-37】查詢有考試成績的學(xué)生人數(shù)。SELECTSUM(degree)AS總成績,AVG(degree)AS平均成績
FROMscWHEREsno='20050101‘SELECTCOUNT(DISTINCTsno)FROMscWHEREdegreeISNOTNULL4.2.4分組與排序1.對(duì)查詢結(jié)果集進(jìn)行分組使用GROUPBY子句可以將查詢結(jié)果按照某一列或多列數(shù)據(jù)值進(jìn)行分類,換句話說,就是對(duì)查詢結(jié)果的信息進(jìn)行歸納,以匯總相關(guān)數(shù)據(jù)。其語法格式如下:[GROUPBY列名清單][HAVING
條件表達(dá)式]
GROUPBY子句把查詢結(jié)果集中的各行按列名清單進(jìn)行分組,在這些列上,對(duì)應(yīng)值都相同的記錄分在同一組。若無HAVING子句,則各組分別輸出;若有HAVING子句,只有符合HAVING條件的組才輸出4.2.4分組與排序【例4-38】統(tǒng)計(jì)各系學(xué)生數(shù)?!纠?-39】統(tǒng)計(jì)student表中男、女學(xué)生人數(shù)SELECTsdept,COUNT(*)FROMstudentGROUPBYsdeptSELECTssex,COUNT(*)FROMstudentGROUPBYssex4.2.4分組與排序【例4-40】統(tǒng)計(jì)各系男、女生人數(shù)?!纠?-41】統(tǒng)計(jì)各系女生人數(shù)。SELECTsdept,ssex,COUNT(*)FROMstudentGROUPBYsdept,ssexSELECTsdept,COUNT(*)FROMstudentWHEREssex='女'GROUPBYsdeptSELECTsdept,COUNT(*)FROMstudentGROUPBYsdept,ssexHAVINGssex=‘女’4.2.4分組與排序【例4-42】查詢選修了3門以上課程的學(xué)生學(xué)號(hào)。SELECTsnoFROMscGROUPBYsnoHAVINGCOUNT(*)>4.2.4分組與排序2.對(duì)查詢結(jié)果集進(jìn)行排序用戶可以利用ORDERBY子句對(duì)查詢結(jié)果按照一個(gè)或多個(gè)字段進(jìn)行升序(ASC)或降序(DESC)排序,默認(rèn)值為升序。語句語法為:[ORDERBY<列名1>[ASC|DESC][,<列名2>[ASC|DESC][,…]4.2.4分組與排序2.對(duì)查詢結(jié)果集進(jìn)行排序【例4-43】查詢選修了C03號(hào)課程的學(xué)生的學(xué)號(hào)及其成績,查詢結(jié)果按分?jǐn)?shù)的降序排列。SELECTsno,degreeFROMscWHEREcno='C03'ORDERBYdegreeDESC4.2.4分組與排序2.對(duì)查詢結(jié)果集進(jìn)行排序【例4-44】查詢?nèi)w學(xué)生情況,查詢結(jié)果按所在系升序排列,同一系中的學(xué)生按出生日期降序排列。SELECT*FROMstudentORDERBYsdeptASC,sbirthDESC4.2.5多表連接查詢多表連接查詢指查詢同時(shí)涉及兩個(gè)或兩個(gè)以上的表;分為:交叉連接、內(nèi)連接、自連接和外連接。4.2.5多表連接查詢廣義笛卡兒積:兩個(gè)分別為n目(即關(guān)系具有n個(gè)屬性)和m目的關(guān)系R和S的廣義笛卡兒積是一個(gè)(n+m)列的元組的集合。記作:R×S={
│trRtsS}R×S元組的前n列是關(guān)系R的一個(gè)元組,后m列是關(guān)系S的一個(gè)元組。若R有k1個(gè)元組,S有k2個(gè)元組,則關(guān)系R和關(guān)系S的廣義笛卡兒積有kl×k2個(gè)元組。4.2.5多表連接查詢廣義笛卡兒積:
R×SR.AR.BR.CS.AS.BS.Ca1b1c1a1b2c2a1b1c1a1b3c2a1b1c1a2b2c1a1b2c2a1b2c2a1b2c2a1b3c2a1b2c2a2b2c1a2b2c1a1b2c2a2b2c1a1b3c2a2b2c1a2b2c1ABCABCa1b1c1a1b2c2a1b2c2a1b3c2a2b2c1a2b2c14.2.5多表連接查詢1.交叉連接交叉連接又稱笛卡兒連接,是指兩個(gè)表之間做笛卡兒積操作,得到結(jié)果集的行數(shù)是兩個(gè)表的行數(shù)的乘積。命令的一般格式如下:SELECT[ALL|DISTINCT][別名.]<選項(xiàng)1>[AS<顯示列名>][,[別名.]<選項(xiàng)2>[AS<顯示列名>]...]FROM<表名1>[別名1],<表名2>[別名2]需要連接查詢的表名在FROM子句中指定,表名之間用英文逗號(hào)隔開;如果表名指定了別名,在該命令中,都必須用別名代替表名。4.2.5多表連接查詢1.交叉連接【例4-45】成績表(sc)和課程名稱表(course)進(jìn)行交叉連接。SELECTA.*,B.*FROMcourseA,scB4.2.5多表連接查詢2.內(nèi)連接內(nèi)連接命令的一般格式如下:SELECT[ALL|DISTINCT][別名.]<選項(xiàng)1>[AS<顯示列名>][,[別名.]<選項(xiàng)2>[AS<顯示列名>][,...]]FROM<表名1>[別名1],<表名2>[別名2][,…]WHERE<連接條件表達(dá)式>[AND<條件表達(dá)式>]或者為:SELECT[ALL|DISTINCT][別名.]<選項(xiàng)1>[AS<顯示列名>][,[別名.]<選項(xiàng)2>[AS<顯示列名>][,...]]FROM<表名1>[別名1]INNERJOIN<表名2>[別名2]ON<連接條件表達(dá)式>[WHERE<條件表達(dá)式>]4.2.5多表連接查詢2.內(nèi)連接連接條件表達(dá)式的一般格式為:[<表名1>]<別名1.列名><比較運(yùn)算符><表名2><別名2.列名>比較運(yùn)算符:使用等號(hào)“=”:等值連接使用不等號(hào):不等值連接4.2.5多表連接查詢2.內(nèi)連接【例4-46】查詢每個(gè)學(xué)生及其選修課的情況學(xué)生的基本情況存放在student表中,選課情況存放在sc表中,所以查詢過程涉及上述兩個(gè)表。這兩個(gè)表是通過公共字段sno實(shí)現(xiàn)內(nèi)連接的。SELECTA.*,B.*FROMstudentA,scBWHEREA.sno=B.sno4.2.5多表連接查詢自然連接:若在等值連接中把目標(biāo)列中的重復(fù)字段去掉,則稱為自然連接?!纠?-47】用自然連接完成查詢:查詢每個(gè)學(xué)生及其選修課的情況。SELECTstudent.sno,sname,ssex,sbirth,sdept,cno,degreeFROMstudent,scWHEREstudent.sno=sc.sno4.2.5多表連接查詢【例4-48】輸出所有女學(xué)生的學(xué)號(hào)、姓名、課號(hào)及成績。SELECTA.sno,sname,cno,degreeFROMstudentA,scBWHEREA.sno=B.snoANDssex='女’SELECTA.sno,sname,cno,degreeFROMstudentAINNERJOINscBONA.sno=B.snoWHEREssex='女’4.2.5多表連接查詢【例4-49】輸出計(jì)算機(jī)系學(xué)生的學(xué)號(hào)、姓名、課程號(hào)及成績。SELECTA.sno,sname,cno,degreeFROMstudentA,scBWHEREA.sno=B.snoANDsdept=‘CS‘SELECTA.sno,sname,cno,degreeFROMstudentAINNERJOINscBONA.sno=B.snoWHEREsdept=‘CS’4.2.5多表連接查詢3.自連接:將同一個(gè)表的不同行連接起來在自連接中,必須為表指定兩個(gè)別名,使之在邏輯上成為兩張表。自連接的命令的一般格式如下:SELECT[ALL|DISTINCT][別名.]<選項(xiàng)1>[AS<顯示列名>][,[別名.]<選項(xiàng)2>[AS<顯示列名>][,...]]FROM<表名1>[別名1],<表名1>[別名2][,…]WHERE<連接條件表達(dá)式>[AND<條件表達(dá)式>]4.2.5多表連接查詢3.自連接:【例4-50】查詢同時(shí)選修了C01和C04課程的學(xué)生學(xué)號(hào)?!纠?-51】查詢與劉晨在同一個(gè)系學(xué)習(xí)的學(xué)生的姓名和所在系。SELECTsnoFROMstudentA,studentBWHEREA.sno=B.snoANDA.cno='C01'ANDB.cno='C04'SELECTB.sname,B.sdeptFROMstudentA,studentBWHEREA.sdept=B.sdeptANDA.sname='劉晨'ANDB.sname!='劉晨'4.2.5多表連接查詢4.外連接在自然連接中,只有在兩個(gè)表中匹配的行才能在結(jié)果集中出現(xiàn)。而在外連接中可以只限制一個(gè)表,而對(duì)另外一個(gè)表不加限制(所有的行都出現(xiàn)在結(jié)果集中)。外連接分為左外連接、右外連接和全外連接。4.2.5多表連接查詢4.外連接外連接命令的一般格式如下:SELECT[ALL|DISTINCT][別名.]<選項(xiàng)1>[AS<顯示列名>][,[別名.]<選項(xiàng)2>[AS<顯示列名>][,...]]FROM<表名1>LEFT|RIGHT|FULL[OUTER]JOIN<表名2>ON<表名1.列1>=<表名2.列2>4.2.5多表連接查詢4.外連接【例4-52】利用左外連接查詢改寫例4-46(查詢每個(gè)學(xué)生及其選修課的情況)。SELECTstudent.sno,sname,ssex,sbirth,sdept,cno,degreeFROMstudentLEFTJOINscONstudent.sno=sc.sno4.2.6嵌套查詢?cè)赟QL語言中,一個(gè)SELECT—FROM—WHERE語句稱為一個(gè)查詢塊。將一個(gè)查詢塊嵌套在另一個(gè)查詢塊的WHERE子句或HAVING子句的條件中稱為嵌套查詢或子查詢。例如:SELECTsnameFROMstudentWHEREsnoIN(SELECTsnoFROMscWHEREcno='C02')4.2.6嵌套查詢注意問題:SQL語言允許多層嵌套查詢;子查詢的SQL語句必須用括號(hào)定界;子查詢不能使用ORDERBY子句,ORDERBY子句只能對(duì)最終查詢結(jié)果排序;嵌套查詢的求解方法是由內(nèi)向外處理;子查詢一般分為兩種:嵌套子查詢和相關(guān)子查詢。4.2.6嵌套查詢1.嵌套子查詢(不相關(guān)子查詢)嵌套子查詢的執(zhí)行不依賴于外部嵌套。嵌套子查詢的執(zhí)行過程為:首先執(zhí)行子查詢,子查詢得到的結(jié)果集不被顯示出來,而是傳給外部查詢,作為外部查詢的條件使用,然后執(zhí)行外部查詢,并顯示查詢結(jié)果。子查詢可以多層嵌套。嵌套子查詢一般也分為兩種:子查詢返回單個(gè)值和子查詢返回一個(gè)值列表。4.2.6嵌套查詢1)返回單個(gè)值【例4-53】查詢所有年齡大于平均年齡的學(xué)生姓名。SELECTsnameFROMstudentWHEREyear(getdate())-year(sbirthday)>(SELECTAVG(year(getdate())-year(sbirthday))FROMstudent)4.2.6嵌套查詢1)返回單個(gè)值【例4-54】查詢與劉晨在同一個(gè)系學(xué)習(xí)的學(xué)生。SELECTsno,sname,sdeptFROMstudentWHEREsdept=(SELECTsdeptFROMstudentWHEREsname='劉晨')4.2.6嵌套查詢2)返回一個(gè)值列表(1)使用IN操作符的嵌套查詢。【例4-55】用IN操作符改寫例4-54——查詢與劉晨在同一個(gè)系學(xué)習(xí)的學(xué)生。SELECTsno,sname,sdeptFROMstudentWHEREsdeptIN(SELECTsdeptFROMstudentWHEREsname='劉晨')4.2.6嵌套查詢2)返回一個(gè)值列表(1)使用IN操作符的嵌套查詢?!纠?-56】查詢沒有選修數(shù)學(xué)的學(xué)生學(xué)號(hào)和姓名。SELECTsno,snameFROMstudentWHEREsnoNOTIN(SELECTsnoFROMscWHEREcnoIN(SELECTcnoFROMcourseWHEREcname='數(shù)學(xué)'))4.2.6嵌套查詢(2)帶有ANY或ALL操作符的子查詢。ANY和ALL操作符在使用時(shí)必須和比較運(yùn)算符一起使用。其格式為:<字段><比較符>[ANY|ALL]<子查詢>。4.2.6嵌套查詢(2)帶有ANY或ALL操作符的子查詢。4.2.6嵌套查詢(2)帶有ANY或ALL操作符的子查詢?!纠?-57】查詢其他系中比計(jì)算機(jī)系某一學(xué)生年齡小的學(xué)生姓名和年齡。SELECTsname,sageFROMstudentWHEREsage<ANY(SELECTsageFROMstudentWHEREsdept='計(jì)算機(jī)系')ANDsdept<>‘計(jì)算機(jī)系’//該句為父查詢中的一個(gè)條件4.2.6嵌套查詢(2)帶有ANY或ALL操作符的子查詢?!纠?-58】查詢其他系中比計(jì)算機(jī)系學(xué)生年齡都小的學(xué)生。SELECT*FROMstudentWHEREsage<ALL(SELECTsageFROMstudentWHEREsdept='計(jì)算機(jī)系')ANDsdept<>'計(jì)算機(jī)系'4.2.6嵌套查詢(2)帶有ANY或ALL操作符的子查詢?!纠?-58】查詢其他系中比計(jì)算機(jī)系學(xué)生年齡都小的學(xué)生。一般聚集函數(shù)實(shí)現(xiàn)的子查詢效率高于ANY或ALL查詢。SELECT*FROMstudentWHEREsage<(SELECTMIN(sage)FROMstudentWHEREsdept='計(jì)算機(jī)系')ANDsdept<>'計(jì)算機(jī)系'4.2.6嵌套查詢2.相關(guān)子查詢(CorrelatedSubquery)在相關(guān)子查詢中,子查詢的執(zhí)行依賴于外部查詢,即子查詢的查詢條件依賴于外部查詢的某個(gè)屬性值。相關(guān)子查詢的子查詢需要重復(fù)被執(zhí)行,而嵌套子查詢的子查詢只需被執(zhí)行一次!在相關(guān)子查詢中,經(jīng)常要用到EXISTS操作符,EXISTS只產(chǎn)生邏輯真值“true”和邏輯假值“false”,不返回任何實(shí)際數(shù)據(jù)。4.2.6嵌套查詢2.相關(guān)子查詢(CorrelatedSubquery)【例4-59】查詢所有選修了C01號(hào)課程的學(xué)生姓名。SELECTsnameFROMstudentWHEREEXISTS(SELECT*FROMscWHEREsno=student.snoANDcno='C01')4.2.6嵌套查詢2.相關(guān)子查詢(Corre
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 校醫(yī)人才引進(jìn)聘用合同范本
- 美容院美容床門安裝合同
- 萬能工銷售業(yè)績合同
- 火車站給水施工合同樣本
- 電子廠裝配工聘用協(xié)議
- 營銷策劃應(yīng)屆生勞動(dòng)合同范本
- 知識(shí)產(chǎn)權(quán)合同制定
- 房地產(chǎn)交易會(huì)場(chǎng)地租賃合同
- 藥店衛(wèi)生保障人員勞動(dòng)合同樣本
- 礦產(chǎn)企業(yè)財(cái)務(wù)主管招聘協(xié)議
- 手術(shù)室實(shí)習(xí)出科
- 2024年2月年安徽省交通科學(xué)研究院招考聘用10人筆試參考題庫附帶答案詳解
- 初中英語新課程標(biāo)準(zhǔn)測(cè)試題及標(biāo)準(zhǔn)答案
- DL-T 5117-2021水下不分散混凝土試驗(yàn)規(guī)程-PDF解密
- 2024-2029年中國硅錳合金市場(chǎng)深度調(diào)查研究報(bào)告
- 2023年外研版英語必修一全冊(cè)課文翻譯
- 土地管理法培訓(xùn)課件
- 國醫(yī)館活動(dòng)策劃方案
- 材料成型及控制工程大學(xué)生職業(yè)生涯規(guī)劃
- 重慶火鍋產(chǎn)業(yè)發(fā)展前景分析與投資風(fēng)險(xiǎn)預(yù)測(cè)報(bào)告
- 花饃行業(yè)分析
評(píng)論
0/150
提交評(píng)論