![數(shù)據(jù)庫(kù)演示文稿_第1頁(yè)](http://file4.renrendoc.com/view/5e3171f3b638b38051a1538f99e63c31/5e3171f3b638b38051a1538f99e63c311.gif)
![數(shù)據(jù)庫(kù)演示文稿_第2頁(yè)](http://file4.renrendoc.com/view/5e3171f3b638b38051a1538f99e63c31/5e3171f3b638b38051a1538f99e63c312.gif)
![數(shù)據(jù)庫(kù)演示文稿_第3頁(yè)](http://file4.renrendoc.com/view/5e3171f3b638b38051a1538f99e63c31/5e3171f3b638b38051a1538f99e63c313.gif)
![數(shù)據(jù)庫(kù)演示文稿_第4頁(yè)](http://file4.renrendoc.com/view/5e3171f3b638b38051a1538f99e63c31/5e3171f3b638b38051a1538f99e63c314.gif)
![數(shù)據(jù)庫(kù)演示文稿_第5頁(yè)](http://file4.renrendoc.com/view/5e3171f3b638b38051a1538f99e63c31/5e3171f3b638b38051a1538f99e63c315.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
數(shù)據(jù)庫(kù)演示文稿當(dāng)前第1頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)優(yōu)選數(shù)據(jù)庫(kù)當(dāng)前第2頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)學(xué)習(xí)目標(biāo)數(shù)據(jù)庫(kù)系統(tǒng)作為數(shù)據(jù)存儲(chǔ)的倉(cāng)庫(kù),同時(shí)還需要擔(dān)當(dāng)起數(shù)據(jù)管理、維護(hù)的角色。當(dāng)前第3頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)學(xué)習(xí)目標(biāo)包括數(shù)據(jù)的入庫(kù)和出庫(kù),前面學(xué)習(xí)了數(shù)據(jù)入庫(kù)時(shí)需要作的相應(yīng)工作,在本章中,將學(xué)習(xí)如何在數(shù)據(jù)庫(kù)中查找數(shù)據(jù)并將該部分?jǐn)?shù)據(jù)“出庫(kù)”,使這些數(shù)據(jù)以一定的格式和排列方法展現(xiàn)給用戶,并且掌握如何增加檢索數(shù)據(jù)易讀性的方法,比如排序在此基礎(chǔ)上,還將學(xué)習(xí)更加復(fù)雜的技巧——分組與匯總。當(dāng)前第4頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)學(xué)習(xí)目標(biāo)掌握這些的單表查詢技巧,將為應(yīng)用程序提供最強(qiáng)的數(shù)據(jù)層的支持,減少邏輯層的負(fù)擔(dān)。結(jié)合以前學(xué)習(xí)的主鍵和外鍵等基礎(chǔ)知識(shí),通過(guò)本章學(xué)習(xí),將逐步掌握按照功能需求熟練檢索出符合要求的數(shù)據(jù)并將其按照指定格式展現(xiàn)給用戶或者應(yīng)用程序。當(dāng)前第5頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)本章要點(diǎn)簡(jiǎn)單查詢語(yǔ)句查詢語(yǔ)句的統(tǒng)計(jì)功能數(shù)據(jù)的聯(lián)接子查詢當(dāng)前第6頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)簡(jiǎn)單查詢語(yǔ)句在創(chuàng)建查詢時(shí),需要輸入相應(yīng)的查詢語(yǔ)句?;镜腟ELECT語(yǔ)句選擇數(shù)據(jù)列使用TOP和DISTINCT使用列別名當(dāng)前第7頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)簡(jiǎn)單查詢語(yǔ)句使用計(jì)算列使用WHERE子句使用ORDERBY子句當(dāng)前第8頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)基本的SELECT語(yǔ)句先看一個(gè)最簡(jiǎn)單的查詢實(shí)例?!纠?-1】查詢Readers表中所有記錄的信息(光盤:\源文件\第4章\例4-1)。當(dāng)前第9頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)基本的SELECT語(yǔ)句USELibraryGOSELECT*FROMReadersGO在查詢分析器中輸入并運(yùn)行上述代碼。當(dāng)前第10頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)最簡(jiǎn)單的查詢語(yǔ)句當(dāng)前第11頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)基本的SELECT語(yǔ)句例4-1中的SELECT語(yǔ)句的作用就是查詢Readers表中的全部信息,其中*表示查詢表中的所有字段,此時(shí),顯示結(jié)果集中的列的順序和創(chuàng)建表時(shí)的順序一致。當(dāng)然,要顯示指定的列,也可以將所有的列名在SELECT關(guān)鍵字后列出。當(dāng)前第12頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)選擇數(shù)據(jù)列如果要查詢表中的部分列,可以將要顯示的列名在SELECT關(guān)鍵字后依次列出,列名與列名之間用英文逗號(hào)隔開(kāi),列的順序可以根據(jù)需要指定。【例4-2】查詢Readers表中所有讀者的編號(hào)、姓名和登記日期(光盤:\源文件\第4章\例4-2)。當(dāng)前第13頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)選擇數(shù)據(jù)列USELibraryGOSELECT讀者編號(hào),姓名,登記日期FROMReadersGO在查詢分析器中輸入并運(yùn)行上述代碼。當(dāng)前第14頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)在表中選擇數(shù)據(jù)列查詢當(dāng)前第15頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用TOP和DISTINCT使用TOP子句使用DISTINCT子句當(dāng)前第16頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用TOP子句在查詢表中數(shù)據(jù)時(shí),用戶可以根據(jù)需要限制返回的行數(shù)。方法是在SELECT語(yǔ)句的字段列表前面使用TOPn子句,則查詢結(jié)果中只顯示表中前n條記錄;如果在字段列表前使用TOPnPERCENT子句,則查詢結(jié)果中只顯示前n%條記錄。當(dāng)前第17頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用TOP子句【例4-3】查詢Readers表中的前5條記錄(光盤:\源文件\第4章\例4-3)。USELibraryGOSELECTTOP5*FROMReadersGO當(dāng)前第18頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用TOP子句在查詢分析器中輸入并運(yùn)行上述代碼,執(zhí)行結(jié)果如下。當(dāng)前第19頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用DISTINCT子句對(duì)表只選擇部分列查詢時(shí),可能會(huì)出現(xiàn)重復(fù)行。如果要消除結(jié)果集中的重復(fù)行,可以在字段列表前面加上DISTINCT關(guān)鍵字?!纠?-4】查詢Books表中所有的出版社(光盤:\源文件\第4章\例4-4)。當(dāng)前第20頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用DISTINCT子句USELibraryGOSELECT出版社FROMBooksGO上述代碼的執(zhí)行結(jié)果如下圖,可以看出結(jié)果集中有重復(fù)行。當(dāng)前第21頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)
沒(méi)有消除重復(fù)行的查詢當(dāng)前第22頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用DISTINCT子句下面的代碼就消除了重復(fù)行,執(zhí)行結(jié)果如下圖所示。USELibraryGOSELECTDISTINCT出版社FROMBooksGO當(dāng)前第23頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)消除重復(fù)行的查詢當(dāng)前第24頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用列別名默認(rèn)結(jié)果集中顯示的列標(biāo)題就是在創(chuàng)建表時(shí)使用的列名。但是,有時(shí)也可以給列標(biāo)題指定別名,以增加結(jié)果集的可讀性。為結(jié)果集的列標(biāo)題指定別名,可以使用以下兩種格式。當(dāng)前第25頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用列別名SELECT列別名=原列名FROM數(shù)據(jù)源SELECT原列名AS列別名FROM數(shù)據(jù)源當(dāng)前第26頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用列別名【例4-5】查詢BookCateGory表中所有記錄的類編號(hào)和類名稱。其中“類編號(hào)”列標(biāo)題指定別名為“圖書種類編號(hào)”,“類名稱”列標(biāo)題指定別名為“圖書種類名稱”(光盤:\源文件\第4章\例4-5)。當(dāng)前第27頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用列別名USELibraryGOSELECT類編號(hào)AS圖書種類編號(hào),類名稱AS圖書種類名稱FROMBookCateGOryGO在查詢分析器中輸入并運(yùn)行上述代碼。當(dāng)前第28頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用列別名當(dāng)前第29頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用計(jì)算列使用SELECT語(yǔ)句對(duì)列進(jìn)行查詢時(shí),在結(jié)果中可以輸出對(duì)列值計(jì)算后的值,即結(jié)果集中的列不是表中現(xiàn)成的列,而是由表中的一個(gè)或多個(gè)列計(jì)算出來(lái)的?!纠?-6】查詢Books表中每本書的書名和打過(guò)8折以后的價(jià)格(光盤:\源文件\第4章\例4-6)。當(dāng)前第30頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用計(jì)算列USELibraryGOSELECT圖書名,價(jià)格*0.8AS折后價(jià)格FROMBooksGO當(dāng)前第31頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用計(jì)算列因?yàn)榻Y(jié)果集中由計(jì)算得到的列是沒(méi)有列名的,所以本例中為其指定列名為“折后價(jià)格”,以增加結(jié)果集的可讀性。在查詢分析器中輸入并運(yùn)行上述代碼。當(dāng)前第32頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用計(jì)算列當(dāng)前第33頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用WHERE子句如果只希望得到表中滿足特定條件的一些記錄,用戶可以在查詢語(yǔ)句中使用WHERE子句。在WHERE子句中,組成條件表達(dá)式的運(yùn)算符有6種。當(dāng)前第34頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)WHERE子句中的運(yùn)算符運(yùn)算符分類運(yùn)算符意義比較運(yùn)算符>、>=、=、<、<=、<>、!=、!>、!<比較大小范圍運(yùn)算符BETWEEN…AND判斷列值是否在指定范圍內(nèi)NOTBETWEEN…AND列表運(yùn)算符IN判斷列值是否為列表中的指定值NOTIN當(dāng)前第35頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)WHERE子句中的運(yùn)算符運(yùn)算符分類運(yùn)算符意義模式匹配符LIKE判斷列值是否與指定的字符通配格式相符NOTLIKE空值運(yùn)算符ISNULL判斷列值是否為空NOTISNULL邏輯運(yùn)算符AND用于多條件的邏輯連接ORNOT當(dāng)前第36頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用WHERE子句下面舉例說(shuō)明WHERE子句中運(yùn)算符的使用方法。比較運(yùn)算符范圍運(yùn)算符當(dāng)前第37頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用WHERE子句列表運(yùn)算符模式匹配運(yùn)算符空值運(yùn)算符邏輯運(yùn)算符當(dāng)前第38頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)比較運(yùn)算符比較運(yùn)算符用來(lái)比較兩個(gè)表達(dá)式的大小,它包括:>、>=、=、<、<=、<>、!=、!>和!<,其中“<>”或“!=”表示不等于,“!>”表示不大于,“!<”表示不小于。當(dāng)前第39頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)比較運(yùn)算符【例4-7】查詢Books表中價(jià)格大于等于20元的圖書的編號(hào)、圖書名、作者以及價(jià)格(光盤:\源文件\第4章\例4-7)。當(dāng)前第40頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)USELibraryGOSELECT圖書編號(hào),圖書名,作者,價(jià)格FROMBooksWHERE價(jià)格>=20GO當(dāng)前第41頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)比較運(yùn)算符在查詢分析器中輸入并運(yùn)行上述代碼,執(zhí)行結(jié)果如下圖。當(dāng)前第42頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)范圍運(yùn)算符范圍運(yùn)算符用來(lái)判斷列值否在指定的范圍內(nèi)。范圍運(yùn)算符包括BETWEEN…AND和NOTBETWEEN…AND。該運(yùn)算符的語(yǔ)法格式如下:列表達(dá)式[NOT]BETWEEN起始值A(chǔ)ND終止值當(dāng)前第43頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)范圍運(yùn)算符如果列表達(dá)式的值在起始值和終止值之間,則運(yùn)算結(jié)果為TRUE,否則為FALSE。使用NOT時(shí),運(yùn)算結(jié)果剛好相反。當(dāng)前第44頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)范圍運(yùn)算符【例4-8】查詢Books表中在2005年期間上架的圖書的編號(hào)、圖書名、作者及上架時(shí)間(光盤:\源文件\第4章\例4-8)。當(dāng)前第45頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)指定查詢范圍當(dāng)前第46頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)列表運(yùn)算符列表運(yùn)算符用來(lái)判斷給定的列值是否在所給定的子列表中。列表運(yùn)算符包括IN和NOTIN。該運(yùn)算符的語(yǔ)法格式如下:列表達(dá)式[NOT]IN(列值1,…列值n)當(dāng)前第47頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)列表運(yùn)算符如果列表達(dá)式的值等于子列表中的某個(gè)值,則運(yùn)算結(jié)果為TRUE,否則運(yùn)算結(jié)果為FALSE。使用NOT時(shí),運(yùn)算結(jié)果剛好相反?!纠?-9】查詢Books表中飛天、新宇兩個(gè)出版社的圖書的編號(hào)、圖書名及出版社(光盤:\源文件\第4章\例4-9)。當(dāng)前第48頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用IN確定查詢值當(dāng)前第49頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)模式匹配運(yùn)算符在實(shí)際應(yīng)用中,經(jīng)常需要根據(jù)一些不確定的信息來(lái)進(jìn)行模糊查詢。模式匹配運(yùn)算符LIKE和NOTLIKE可以實(shí)現(xiàn)這類查詢,其中LIKE表示字符串表達(dá)式的值與匹配串相符,NOTLIKE則相反。其一般語(yǔ)法格式如下:字符串表達(dá)式[NOT]LIKE'<匹配串>'當(dāng)前第50頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)模式匹配運(yùn)算符其中匹配串可以是一個(gè)完整的字符串,也可以是含有通配符的字符串。當(dāng)前第51頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)通配符說(shuō)明通配符說(shuō)明%代表0個(gè)或多個(gè)字符_(下劃線)代表單個(gè)字符[]指定范圍(如[a-f]、[0-9])或集合(如[abcdef])中的任何單個(gè)字符[^]指定不屬于范圍(如[^a-f]、[^0-9])或集合(如[^abcdef])中的任何單個(gè)字符當(dāng)前第52頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)模式匹配運(yùn)算符【例4-10】查詢Readers表中姓“張”的讀者的信息(光盤:\源文件\第4章\例4-10)。通配符字符串'張%'的含義是第一個(gè)漢字是“張”的字符串。當(dāng)前第53頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)模糊查詢當(dāng)前第54頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)空值運(yùn)算符數(shù)據(jù)庫(kù)中的數(shù)據(jù)一般都應(yīng)該是有意義的,但有些列的值可能暫時(shí)不知道或不確定,這時(shí)可以不輸入該列的值,那么稱該列的值為空值,通常用NULL表示。空值與0或空格是不一樣的??罩颠\(yùn)算符ISNULL和NOTISNULL用來(lái)判斷指定的列值是否為空。當(dāng)前第55頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)空值運(yùn)算符其語(yǔ)法格式如下:列表達(dá)式[NOT]ISNULL【例4-11】查詢Readers表中住址為空的讀者的編號(hào)、姓名、性別和住址(光盤:\源文件\第4章\例4-11)。在查詢分析器中輸入并運(yùn)行上述代碼。當(dāng)前第56頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)查詢空值當(dāng)前第57頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)邏輯運(yùn)算符用戶可以使用邏輯運(yùn)算符AND、OR和NOT連接多個(gè)查詢條件,實(shí)現(xiàn)多重條件查詢。邏輯運(yùn)算符語(yǔ)法格式如下:[NOT]邏輯表達(dá)式AND|OR[NOT]邏輯表達(dá)式當(dāng)前第58頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)邏輯運(yùn)算符【例4-12】要求用邏輯運(yùn)算符實(shí)現(xiàn)例4-8中的查詢(光盤:\源文件\第4章\例4-12)。當(dāng)前第59頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)邏輯運(yùn)算符USELibraryGOSELECT圖書編號(hào),圖書名,作者,上架時(shí)間FROMBooksWHERE上架時(shí)間>='2005-01-01'AND上架時(shí)間<='2005-12-31'GO當(dāng)前第60頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)邏輯運(yùn)算符上述代碼的執(zhí)行結(jié)果和例4-8相同。當(dāng)前第61頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)邏輯運(yùn)算符【例4-13】要求用邏輯運(yùn)算符實(shí)現(xiàn)例4-9中的查詢(光盤:\源文件\第4章\例4-13)。USELibraryGOSELECT圖書編號(hào),圖書名,出版社當(dāng)前第62頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)邏輯運(yùn)算符FROMBooksWHERE出版社='飛天'OR出版社='新宇'GO上述代碼的執(zhí)行結(jié)果和例4-9相同。當(dāng)前第63頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用IN確定查詢值當(dāng)前第64頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用ORDERBY子句通常查詢結(jié)果集中的記錄的順序是它們?cè)诒碇械捻樞颍袝r(shí)用戶希望查詢結(jié)果集中的記錄按某種順序顯示??梢酝ㄟ^(guò)ORDEYBY子句改變查詢結(jié)果集中記錄的顯示順序。ORDERBY子句的語(yǔ)法格式為:ORDERBY{列名[ASC|DESC]}[,…n]當(dāng)前第65頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用ORDERBY子句其中ASC表示按升序排列,DESC按降序排列,默認(rèn)為ASC。當(dāng)按多列排序時(shí),先按寫在前面的列排序,當(dāng)前面的列值相同時(shí),再按后面的列排序。當(dāng)前第66頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用ORDERBY子句【例4-14】查詢Books表中“新宇”出版社圖書的編號(hào)、圖書名、出版社、類編號(hào)及上架時(shí)間。查詢結(jié)果先按類編號(hào)降序排列,類編號(hào)相同的書再按上架時(shí)間升序排列(光盤:\源文件\第4章\例4-14)。當(dāng)前第67頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)將查詢結(jié)果排序當(dāng)前第68頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)查詢語(yǔ)句的統(tǒng)計(jì)功能用戶經(jīng)常需要對(duì)查詢結(jié)果集進(jìn)行統(tǒng)計(jì),例如求和、平均值、最大值、最小值和個(gè)數(shù)等,這些統(tǒng)計(jì)可以通過(guò)以下3種方法實(shí)現(xiàn)。使用聚合函數(shù)。使用GROUPBY子句。使用COMPUTE子句。當(dāng)前第69頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)查詢語(yǔ)句的統(tǒng)計(jì)功能使用聚合函數(shù)使用GROUPBY子句使用COMPUTE子句當(dāng)前第70頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用聚合函數(shù)聚合函數(shù)用來(lái)對(duì)查詢結(jié)果集中的記錄進(jìn)行統(tǒng)計(jì)計(jì)算,并在結(jié)果集中將統(tǒng)計(jì)結(jié)果生成一條新記錄。SQLServer2000提供了許多聚合函數(shù)。當(dāng)前第71頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)常用集合函數(shù)表函數(shù)名語(yǔ)法格式功能說(shuō)明AVGAVG([ALL|DISTINCT]列名)計(jì)算一個(gè)數(shù)值列的平均值SUMSUM([ALL|DISTINCT]列名)計(jì)算一個(gè)數(shù)值列的總和MAXMAX([ALL|DISTINCT]列名)返回指定列中的最大值MINMIN([ALL|DISTINCT]列名)返回指定列中的最小值COUNTCOUNT([ALL|DISTINCT]列名|*)統(tǒng)計(jì)查詢結(jié)果集中記錄的個(gè)數(shù)當(dāng)前第72頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用聚合函數(shù)表4-3語(yǔ)法格式中的DISTINCT表示去掉指定列中的重復(fù)值,ALL表示不取消重復(fù)值,默認(rèn)是ALL?!纠?-15】計(jì)算Books表中所有圖書的平均價(jià)格、總價(jià)、最高價(jià)、最低價(jià)及記錄的個(gè)數(shù)(光盤:\源文件\第4章\例4-15)。當(dāng)前第73頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)聚合函數(shù)的使用當(dāng)前第74頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用GROUPBY子句GROUPBY子句用于對(duì)結(jié)果集進(jìn)行分組并對(duì)每一組數(shù)據(jù)進(jìn)行匯總計(jì)算。其語(yǔ)法格式為:GROUPBY列名[HAVING條件表達(dá)式]當(dāng)前第75頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用GROUPBY子句GROUPBY按“列名”指定的列進(jìn)行分組,將該列列值相同的記錄組成一組,對(duì)每一組進(jìn)行匯總計(jì)算。每一組生成一條記錄。若有“HAVING條件表達(dá)式”選項(xiàng),則表示對(duì)生成的組進(jìn)行篩選。當(dāng)前第76頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用GROUPBY子句【例4-16】統(tǒng)計(jì)Books表中各個(gè)出版社的圖書數(shù)量(光盤:\源文件\第4章\例4-16)。在查詢分析器中輸入并運(yùn)行上述代碼。當(dāng)前第77頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)分組統(tǒng)計(jì)當(dāng)前第78頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用GROUPBY子句【例4-17】對(duì)例4-16中的代碼改為以下代碼,則只顯示圖書數(shù)量大于10的匯總行(光盤:\源文件\第4章\例4-17)。在查詢分析器中輸入并運(yùn)行上述代碼。當(dāng)前第79頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)對(duì)分組統(tǒng)計(jì)進(jìn)行篩選當(dāng)前第80頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用COMPUTE子句COMPUTE子句對(duì)查詢結(jié)果集進(jìn)行匯總統(tǒng)計(jì),并顯示參加匯總記錄的詳細(xì)信息。其語(yǔ)法格式為:COMPUTE聚合函數(shù)[BY列名]當(dāng)前第81頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用COMPUTE子句COMPUTEBY子句與GROUPBY子句的功能類似,都可以對(duì)查詢結(jié)果集進(jìn)行分組統(tǒng)計(jì),不同的是,COMPUTEBY子句不僅顯示匯總數(shù)據(jù),還分組顯示參加匯總的記錄的詳細(xì)信息,而GROUPBY子句僅顯示匯總數(shù)據(jù)。當(dāng)前第82頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用COMPUTE子句【例4-18】統(tǒng)計(jì)Books表中各出版社的圖書數(shù)量,并顯示參加匯總的記錄的詳細(xì)信息(光盤:\源文件\第4章\例4-18)。在查詢分析器中輸入并運(yùn)行上述代碼,其執(zhí)行結(jié)果如下圖。由于記錄個(gè)數(shù)較多,所以該圖只顯示出部分出版社的統(tǒng)計(jì)信息。當(dāng)前第83頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用COMPUTE子句當(dāng)前第84頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用COMPUTE子句從上圖可以看出,COMPUTE子句產(chǎn)生附加的匯總行,其列標(biāo)題是系統(tǒng)自定的,如對(duì)于COUNT函數(shù)為cnt,對(duì)于AVG函數(shù)為avg,對(duì)于SUM函數(shù)為sum。當(dāng)前第85頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)數(shù)據(jù)的連接前面講的查詢都是針對(duì)一個(gè)表進(jìn)行的,而在實(shí)際應(yīng)用中,一個(gè)查詢往往需要從多個(gè)表中檢索數(shù)據(jù),這就需要使用聯(lián)接查詢。聯(lián)接分為交叉聯(lián)接、內(nèi)聯(lián)接、外聯(lián)接和自聯(lián)接4種。下面分別進(jìn)行介紹。當(dāng)前第86頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)數(shù)據(jù)的連接交叉聯(lián)接內(nèi)聯(lián)接外聯(lián)接自聯(lián)接合并結(jié)果集當(dāng)前第87頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)
交叉聯(lián)接交叉聯(lián)接又稱非限制聯(lián)接(廣義笛卡爾積),它將兩個(gè)表不加任何約束地組合在一起,也就是將第一個(gè)表的所有記錄分別與第二個(gè)表的每條記錄拼接組成新記錄,聯(lián)接后結(jié)果集的行數(shù)就是兩個(gè)表的行的乘積,結(jié)果集的列數(shù)就是兩個(gè)表的列數(shù)之和。當(dāng)前第88頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)
交叉聯(lián)接交叉聯(lián)接有以下兩種語(yǔ)法格式。SELECT列名列表FROM表名1CROSSJOIN表名2SELECT列名列表FROM表名l,表名2當(dāng)前第89頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)交叉聯(lián)接【例4-19】假設(shè)數(shù)據(jù)庫(kù)Library中又創(chuàng)建了tl和t2兩個(gè)表,如圖4-18所示。tl表中有“讀者編號(hào)”和“姓名”兩字段,t2表中有“讀者編號(hào)”和“已借冊(cè)數(shù)”兩字段,兩表各包含3條記錄。用交叉連接方法聯(lián)接兩表,觀察聯(lián)接后的結(jié)果。(光盤:\源文件\第4章\例4-19)當(dāng)前第90頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)t1表和t2表當(dāng)前第91頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)交叉聯(lián)接USELibraryGOSELECT*FROMt1CROSSJOINt2GO在查詢分析器中輸入并運(yùn)行上述代碼,其執(zhí)行結(jié)果如下圖。當(dāng)前第92頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)交叉聯(lián)接當(dāng)前第93頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)交叉聯(lián)接在實(shí)際應(yīng)用中,使用交叉聯(lián)接產(chǎn)生的結(jié)果集一般沒(méi)有什么意義,但在數(shù)據(jù)庫(kù)的數(shù)學(xué)模式上有重要的作用。當(dāng)前第94頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)內(nèi)聯(lián)接內(nèi)聯(lián)接是將兩個(gè)表中滿足聯(lián)接條件的記錄組合在一起。聯(lián)接條件的一般格式為:ON[<表名1>.]<列名><比較運(yùn)算符>[<表名2>.]<列名>參數(shù)說(shuō)明如下所示。比較運(yùn)算符可以是>、>=、=、<、<=、<>、!=、!>及!<。當(dāng)前第95頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)內(nèi)聯(lián)接當(dāng)比較運(yùn)算符為“=”時(shí),稱為等值聯(lián)接。若在等值聯(lián)接的結(jié)果集中去除相同的列,則為自然聯(lián)接。使用除“=”外運(yùn)算符的聯(lián)接為非等值聯(lián)接。在實(shí)際應(yīng)用中,聯(lián)接條件通常采用“on主鍵=外鍵”的形式。當(dāng)前第96頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)內(nèi)聯(lián)接內(nèi)聯(lián)接有以下兩種語(yǔ)法格式。第一種格式:SELECT列名列表FROM表名l[INNER]JOIN表名2ON表名1.列名=表名2.列名第二種格式:SELECT列名列表FROM表名l,表名2WHERE表名1.列名=表名2.列名當(dāng)前第97頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)內(nèi)聯(lián)接參數(shù)說(shuō)明如下所示。內(nèi)聯(lián)接是系統(tǒng)默認(rèn)的聯(lián)接,INNER選項(xiàng)可以省略。當(dāng)前第98頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)內(nèi)聯(lián)接若SELECT子句中有同名列,則必須用“表名.列名”來(lái)表示。為了方便使用,可以給表名定義別名。別名是在FROM子句中指定的,格式為“表名AS別名”或“表名別名”。若為表指定了別名,則只能用“別名.列名”來(lái)表示同名列,不能用“表名.列名”表示。當(dāng)前第99頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)內(nèi)聯(lián)接【例4-20】用內(nèi)聯(lián)接方法聯(lián)接tl和t2兩表,不去除重復(fù)列(讀者編號(hào))。觀察聯(lián)接后的結(jié)果集與交叉聯(lián)接有何區(qū)別(光盤:\源文件\第4章\例4-20)。當(dāng)前第100頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)內(nèi)聯(lián)接USELibraryGOSELECT*FROMt1JOINt2ONt1.讀者編號(hào)=t2.讀者編號(hào)GO當(dāng)前第101頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)內(nèi)聯(lián)接在查詢分析器中輸入并運(yùn)行上述代碼,其執(zhí)行結(jié)果如下圖??梢钥吹街挥袧M足聯(lián)接條件的記錄才被拼接到結(jié)果集中,結(jié)果集是兩個(gè)表中記錄的交集。當(dāng)前第102頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)有重復(fù)列的內(nèi)聯(lián)接當(dāng)前第103頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)內(nèi)聯(lián)接【例4-21】用內(nèi)聯(lián)接方法聯(lián)接tl和t2兩表,去除重復(fù)列(讀者編號(hào))(光盤:\源文件\第4章\例4-21)。當(dāng)前第104頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)內(nèi)聯(lián)接USELibraryGOSELECTa.讀者編號(hào),姓名,已借冊(cè)數(shù)FROMt1aJOINt2bONa.讀者編號(hào)=b.讀者編號(hào)GO當(dāng)前第105頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)內(nèi)聯(lián)接在查詢分析器中輸入并運(yùn)行上述代碼,其執(zhí)行結(jié)果如下圖。可以看出結(jié)果集中不含重復(fù)列(讀者編號(hào)),去掉重復(fù)列的等值內(nèi)聯(lián)接則為自然聯(lián)接。自然聯(lián)接是聯(lián)接的主要形式,在實(shí)際中應(yīng)用最為廣泛。當(dāng)前第106頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)不含重復(fù)列的內(nèi)聯(lián)接當(dāng)前第107頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)內(nèi)聯(lián)接也可以用第二種格式的代碼實(shí)現(xiàn)上述功能:USELibraryGOSELECTa.讀者編號(hào),姓名,已借冊(cè)數(shù)FROMt1a,t2bWHEREa.讀者編號(hào)=b.讀者編號(hào)GO當(dāng)前第108頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)外聯(lián)接外聯(lián)接又分為左外聯(lián)接、右外聯(lián)接、全外聯(lián)接3種。外聯(lián)接的結(jié)果集中不但包含滿足聯(lián)接條件的記錄,還包含相應(yīng)表中的不滿足聯(lián)接條件的記錄。左外聯(lián)接右外聯(lián)接全外聯(lián)接當(dāng)前第109頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)左外聯(lián)接左外聯(lián)接的語(yǔ)法格式為:SELECT列名列表FROM表名lLEFT[OUTER]JOIN表名2ON表名1.列名=表名2.列名當(dāng)前第110頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)左外聯(lián)接左外聯(lián)接的結(jié)果集中包括了左表的所有記錄,而不僅僅是滿足聯(lián)接條件的記錄。如果左表的某記錄在右表中沒(méi)有匹配行,則該記錄在結(jié)果集行中屬于右表的相應(yīng)列值均為NULL。當(dāng)前第111頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)左外聯(lián)接【例4-22】用左外聯(lián)接方法聯(lián)接tl和t2兩表。觀察聯(lián)接后所產(chǎn)生的結(jié)果(光盤:\源文件\第4章\例4-22)。在查詢分析器中輸入并運(yùn)行上述代碼,其執(zhí)行結(jié)果如下圖所示。當(dāng)前第112頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)左外聯(lián)接當(dāng)前第113頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)右外聯(lián)接右外聯(lián)接的語(yǔ)法格式為:SELECT列名列表FROM表名lRIGHT[OUTER]JOIN表名2ON表名1.列名=表名2.列名當(dāng)前第114頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)右外聯(lián)接右外聯(lián)接的結(jié)果集中包括了右表的所有記錄,而不僅僅是滿足聯(lián)接條件的記錄。如果右表的某記錄在左表中沒(méi)有匹配行,則該記錄在結(jié)果集行中屬于左表的相應(yīng)列值均為NULL。當(dāng)前第115頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)右外聯(lián)接【例4-23】用右外聯(lián)接方法聯(lián)接tl和t2兩表。觀察聯(lián)接后所產(chǎn)生的結(jié)果(光盤:\源文件\第4章\例4-23)。在查詢分析器中輸入并運(yùn)行上述代碼,其執(zhí)行結(jié)果如下圖。當(dāng)前第116頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)右外聯(lián)接當(dāng)前第117頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)全外聯(lián)接全外聯(lián)接的語(yǔ)法格式為:SELECT列名列表FROM表名lFULL[OUTER]JOIN表名2ON表名1.列名=表名2.列名當(dāng)前第118頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)全外聯(lián)接全外聯(lián)接的結(jié)果集中包括了左表和右表的所有記錄。當(dāng)某記錄在另一個(gè)表中沒(méi)有匹配記錄時(shí),則另一個(gè)表的相應(yīng)列值為NULL?!纠?-24】用全外聯(lián)接方法聯(lián)接tl和t2兩表。觀察聯(lián)接后所產(chǎn)生的結(jié)果(光盤:\源文件\第4章\例4-24)。當(dāng)前第119頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)全外聯(lián)接在查詢分析器中輸入并運(yùn)行上述代碼,其執(zhí)行結(jié)果如下圖所示。當(dāng)前第120頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)自聯(lián)接自聯(lián)接就是將一個(gè)表與它自身進(jìn)行聯(lián)接,可看作一個(gè)表中的兩個(gè)副本之間的內(nèi)聯(lián)接。若要在一個(gè)表中查找具有相同列值的行,則可以使用自聯(lián)接。使用自聯(lián)接時(shí),必須為表指定兩個(gè)不同的別名,使之在邏輯上成為兩個(gè)表。當(dāng)前第121頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)自聯(lián)接【例4-25】用自聯(lián)接的方法查詢Books表中“圖書名”相同作者不同的圖書信息。要求只顯示圖書編號(hào)、圖書名、作者和出版社(光盤:\源文件\第4章\例4-25)。在查詢分析器中輸入并運(yùn)行上述代碼,其執(zhí)行結(jié)果如下圖所示。當(dāng)前第122頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)自聯(lián)接當(dāng)前第123頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)合并結(jié)果集使用UNION語(yǔ)句可以將多個(gè)查詢結(jié)果集合并為一個(gè)結(jié)果集。UNION子句的語(yǔ)法格式如下:SELECT語(yǔ)句{UNIONSELECT語(yǔ)句}[,…n]當(dāng)前第124頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)合并結(jié)果集合并結(jié)果集的基本規(guī)則如下。UNION合并的各結(jié)果集的列數(shù)必須相同,對(duì)應(yīng)的數(shù)據(jù)類型也必須兼容。默認(rèn)情況下系統(tǒng)將自動(dòng)去掉合并后的結(jié)果集中重復(fù)的行。最后結(jié)果集中的列名來(lái)自第一個(gè)SELECT語(yǔ)句。當(dāng)前第125頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)合并結(jié)果集【例4-26】將Readers表中2004年登記的讀者記錄保存到表Readers_2004中,2005年登記的讀者記錄保存到表Readers_2005中,然后將兩個(gè)表的查詢結(jié)果合并為一個(gè)結(jié)果集(光盤:\源文件\第4章\例4-26)。當(dāng)前第126頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)合并結(jié)果集可以在查詢分析器中輸入上述代碼,并查看執(zhí)行結(jié)果。UNION操作常用于歸檔數(shù)據(jù),例如歸檔月報(bào)表為年報(bào)表,歸檔各部門數(shù)據(jù)等。注意UNION還可以與ORDERBY、GROUPBY子句一起使用,用來(lái)對(duì)合并所得的結(jié)果集進(jìn)行分組或排序。當(dāng)前第127頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)子查詢下面介紹相關(guān)子查詢和嵌套子查詢的兩種方式。相關(guān)子查詢嵌套子查詢當(dāng)前第128頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)相關(guān)子查詢?cè)谙嚓P(guān)子查詢中,子查詢的執(zhí)行依賴于外部查詢,多數(shù)情況下是在子查詢的WHERE子句中引用了外部查詢的表。相關(guān)子查詢的執(zhí)行過(guò)程與前面所講的查詢完全不同,前面介紹的子查詢?cè)谡麄€(gè)查詢過(guò)程中只執(zhí)行一次,而相關(guān)子查詢中的子查詢需要重復(fù)地執(zhí)行。當(dāng)前第129頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)相關(guān)子查詢相關(guān)子查詢的執(zhí)行過(guò)程是:子查詢?yōu)橥獠坎樵兊拿恳恍袌?zhí)行一次,外部查詢將子查詢引用的外部字段的值傳給子查詢,進(jìn)行子查詢操作;外部查詢根據(jù)子查詢得到的結(jié)果或結(jié)果集返回滿足條件的結(jié)果行;外部表的每一行都將做相同的處理。當(dāng)前第130頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)相關(guān)子查詢【例4-27】查詢Books表中大于該類圖書價(jià)格平均值的圖書信息。(光盤:\源文件\第4章\例4-27)當(dāng)前第131頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)相關(guān)子查詢與前面介紹過(guò)的子查詢不同,該語(yǔ)句中的子查詢無(wú)法獨(dú)立于外部查詢而得到解決。該子查詢需要一個(gè)“類編號(hào)”值,而該值是個(gè)變量,隨SQLServer檢查Books表中的不同行而改變。下面詳細(xì)說(shuō)明該查詢的執(zhí)行過(guò)程:當(dāng)前第132頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)相關(guān)子查詢先將Books表的第一條記錄的“類編號(hào)”的值“13”代入到子查詢中,則子查詢變?yōu)槿缦滦问剑篠ELECTAVG(價(jià)格)FROMBooksASbWHERE類編號(hào)=13當(dāng)前第133頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)相關(guān)子查詢子查詢的結(jié)果為該類圖書的平均價(jià)格,如本例為20.9750,所以外部查詢變?yōu)椋篠ELECT圖書名,作者,出版社,類編號(hào),價(jià)格FROMBooksAsaWHERE價(jià)格>20.9750當(dāng)前第134頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)相關(guān)子查詢?nèi)绻鸚HERE條件為TRUE,則第一條記錄包括在結(jié)果集中,否則不在結(jié)果集中。對(duì)Books表中的所有行運(yùn)行相同的過(guò)程,最后形成一個(gè)結(jié)果集。當(dāng)前第135頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)相關(guān)子查詢當(dāng)前第136頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)相關(guān)子查詢?cè)谧硬樵冎校€可以通過(guò)運(yùn)算符EXISTS來(lái)判斷子查詢的結(jié)果是否為空表。如果子查詢的結(jié)果集不為空,EXISTS返回TRUE;否則返回FALSE。使用NOTEXIST時(shí)其返回值與EXISTS剛好相反。當(dāng)前第137頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)相關(guān)子查詢【例4-28】利用EXISTS查詢所有支付過(guò)罰金的讀者的信息。(光盤:\源文件\第4章\例4-28)在查詢分析器中輸入并運(yùn)行上述代碼,其執(zhí)行結(jié)果如下圖所示。當(dāng)前第138頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用EXISTS運(yùn)算符的相關(guān)子查詢當(dāng)前第139頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)相關(guān)子查詢本例中由EXISTS引出的子查詢屬于相關(guān)子查詢,該查詢與下面用IN表示的非相關(guān)的子查詢返回的結(jié)果一樣:USELibraryGOSELECT*當(dāng)前第140頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)相關(guān)子查詢FROMReadersWHERE讀者編號(hào)IN(SELECT讀者編號(hào)FROMBorrowHistoryWHERE支付罰金>0)GO當(dāng)前第141頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)相關(guān)子查詢另外,使用聯(lián)接也可以實(shí)現(xiàn)【例4-28】中的查詢,而且聯(lián)接還可以同時(shí)顯示來(lái)自多個(gè)表中的字段,代碼如下:USELibraryGOSELECTa.讀者編號(hào),a.姓名,b.圖書編號(hào),b.支付罰金當(dāng)前第142頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)相關(guān)子查詢FROMReadersASaJOINBorrowHistoryASbONa.讀者編號(hào)=b.讀者編號(hào)WHEREb.支付罰金>0GO在查詢分析器中輸入并運(yùn)行上述代碼,其執(zhí)行結(jié)果如下圖所示。當(dāng)前第143頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用聯(lián)接實(shí)現(xiàn)例4-28的查詢當(dāng)前第144頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)相關(guān)子查詢聯(lián)接和子查詢可能都要涉及兩個(gè)或多個(gè)表,它們之間的區(qū)別如下。聯(lián)接可以合并兩個(gè)或多個(gè)表中的數(shù)據(jù),而帶子查詢的SELECT語(yǔ)句的結(jié)果只能來(lái)自一個(gè)表,子查詢的結(jié)果只是用來(lái)作為選擇結(jié)果數(shù)據(jù)時(shí)進(jìn)行參照的。當(dāng)前第145頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)相關(guān)子查詢有的查詢既可以使用子查詢來(lái)表達(dá),也可以使用聯(lián)接表達(dá)。通常使用子查詢表示時(shí)可以將一個(gè)復(fù)雜的查詢分解為一系列的邏輯步驟,條理清晰,而使用聯(lián)接表示有執(zhí)行速度快的優(yōu)點(diǎn)。因此,在實(shí)際應(yīng)用中,讀者應(yīng)根據(jù)具體情況來(lái)決定使用哪種方法。當(dāng)前第146頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)嵌套子查詢嵌套子查詢的執(zhí)行不依賴于外部查詢。這類子查詢的執(zhí)行過(guò)程是:首先執(zhí)行子查詢,子查詢得到的結(jié)果不被顯示出來(lái),而是傳遞給外部查詢,作為外部查詢的條件來(lái)使用,然后執(zhí)行外部查詢,并顯示整個(gè)查詢結(jié)果。當(dāng)前第147頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)嵌套子查詢嵌套子查詢一般可分為兩種:返回單個(gè)值的子查詢和返回一個(gè)值列表的子查詢,下面分別舉例說(shuō)明。返回單個(gè)值返回一個(gè)值列表當(dāng)前第148頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)返回單個(gè)值該單值常被外部查詢用來(lái)進(jìn)行比較操作?!纠?-29】在Books表中,查詢所有價(jià)格高于平均價(jià)格的圖書名、作者、出版社和價(jià)格。(光盤:\源文件\第4章\例4-29)當(dāng)前第149頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)返回單個(gè)值本例的執(zhí)行過(guò)程是先執(zhí)行子查詢:SELECTAVG(價(jià)格)FROMBooks其結(jié)果為23.2050(并不顯示),當(dāng)前第150頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)返回單個(gè)值再執(zhí)行外部查詢:SELECT圖書名,作者,出版社,價(jià)格FROMBooksWHERE價(jià)格>23.2050這樣得到本例的結(jié)果如下圖所示。當(dāng)前第151頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)返回單值的子查詢當(dāng)前第152頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)返回一個(gè)值列表如果子查詢返回一個(gè)值列表,則該列表常和IN、NOTIN、ANY和ALL邏輯運(yùn)算符一起構(gòu)成外部查詢的查詢條件。1)IN和NOTIN運(yùn)算符當(dāng)前第153頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)返回一個(gè)值列表IN和NOTIN運(yùn)算符用來(lái)將一個(gè)表達(dá)式的值與子查詢返回的一列值進(jìn)行比較。使用IN運(yùn)算符時(shí),如果該表達(dá)式的值與此列中的任何一個(gè)相等,則IN測(cè)試返回TRUE;如果該表達(dá)式的值與此列中的任何一個(gè)值都不相等,則返回FALSE。使用NOTIN時(shí)結(jié)果相反。當(dāng)前第154頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)返回一個(gè)值列表【例4-30】查詢所有借閱圖書的讀者信息(光盤:\源文件\第4章\例4-30)。在這個(gè)例子中,首先得到“SELECT讀者編號(hào)FROMBorrow”子查詢的結(jié)果集,它為一列值,即所有借閱讀書的讀者編號(hào),然后將其和IN運(yùn)算符組成外部查詢的條件執(zhí)行外部查詢,并得到最終結(jié)果。當(dāng)前第155頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用IN運(yùn)算符的子查詢當(dāng)前第156頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)返回一個(gè)值列表2)ANY和ALL運(yùn)算符ANY運(yùn)算符要求的語(yǔ)法格式如下:表達(dá)式比較運(yùn)算符ANY(子查詢)當(dāng)前第157頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)返回一個(gè)值列表ANY運(yùn)算符通過(guò)比較運(yùn)算符將一個(gè)表達(dá)式的值與子查詢返回的一列值中的每一個(gè)進(jìn)行比較。只要有一次比較的結(jié)果為TRUE,則ANY測(cè)試返回TRUE;若每一次比較的結(jié)果均為FALSE,則ANY測(cè)試返回FALSE。當(dāng)前第158頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)返回一個(gè)值列表如表達(dá)式“>ANY(1,2,3)”與“>1”等價(jià)。由于比任何一個(gè)數(shù)大表達(dá)式就成立,所以只要比最小數(shù)大即可。再如,表達(dá)式“〈ANY(1,2,3)”與“〈3”等價(jià)。由于比任何一個(gè)數(shù)小表達(dá)式就成立,所以只要比最大數(shù)小即可。當(dāng)前第159頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)返回一個(gè)值列表【例4-31】在Books表中,查詢“新宇”出版社的圖書中價(jià)格比“飛天”出版社最低定價(jià)還高的圖書信息(光盤:\源文件\第4章\例4-31)。在查詢分析器中輸入并運(yùn)行上述代碼,其執(zhí)行結(jié)果如下圖所示。當(dāng)前第160頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用ANY運(yùn)算符的子查詢當(dāng)前第161頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)返回一個(gè)值列表ALL運(yùn)算符要求的語(yǔ)法格式如下:表達(dá)式比較運(yùn)算符ALL(子查詢)當(dāng)前第162頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)返回一個(gè)值列表ALL運(yùn)算符通過(guò)比較運(yùn)算符將一個(gè)表達(dá)式的值與子查詢返回的一列值中的每一個(gè)進(jìn)行比較。若每一次比較的結(jié)果均為TRUE,則ALL測(cè)試返回TRUE;只要有一次比較的結(jié)果為FALSE,則ALL測(cè)試返回FALSE。當(dāng)前第163頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)返回一個(gè)值列表如表達(dá)式“>ALL(1,2,3)”與“>3”等價(jià)。由于比所有數(shù)都大表達(dá)式才成立,所以只要比最大數(shù)大即可。再如,表達(dá)式“〈ALL(1,2,3)”與“〈1”等價(jià)。由于比所有數(shù)都小表達(dá)式才成立,所以只要比最小數(shù)小即可。當(dāng)前第164頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)返回一個(gè)值列表【例4-32】在Books表中,查詢所有比“飛天”出版社的圖書上架時(shí)間都早的圖書信息。(光盤:\源文件\第4章\例4-32)在查詢分析器中輸入并運(yùn)行上述代碼,其執(zhí)行結(jié)果如下圖所示。當(dāng)前第165頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用ALL運(yùn)算符的子查詢當(dāng)前第166頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)上機(jī)練習(xí)本節(jié)上機(jī)練習(xí)將進(jìn)行圖書管理系統(tǒng)的查詢,通過(guò)這個(gè)例子,掌握SELECT語(yǔ)句的基本語(yǔ)法、聚合函數(shù)的作用和使用方法,掌握GROUPBY和ORDEYBY子句的使用方法,掌握聯(lián)接查詢和子查詢的表示方法(光盤:\源文件\第4章\上機(jī)練習(xí))。當(dāng)前第167頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)上機(jī)練習(xí)SELECT語(yǔ)句的基本使用數(shù)據(jù)統(tǒng)計(jì)聯(lián)接查詢的使用子查詢的使用單表查詢多表查詢當(dāng)前第168頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)SELECT語(yǔ)句的基本使用首先使用SELECT語(yǔ)句查詢數(shù)據(jù)庫(kù)中的相關(guān)信息。當(dāng)前第169頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)數(shù)據(jù)統(tǒng)計(jì)數(shù)據(jù)統(tǒng)計(jì)的具體操作如下。當(dāng)前第170頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)聯(lián)接查詢的使用從Borrow、Books、Readers3個(gè)表中,查詢所有借書讀者的姓名、借書名稱、借閱日期、應(yīng)還日期。為了更好地驗(yàn)證結(jié)果,讀者可先在Readers表中插入一條和表中現(xiàn)有姓名相同的記錄,然后再作練習(xí)。當(dāng)前第171頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)子查詢的使用下面將練習(xí)子查詢的使用,具體操作如下。該例是一個(gè)相關(guān)子查詢。讀者可以使用NOTIN把它改寫為非相關(guān)的子查詢。同樣,讀者也可以查詢從來(lái)沒(méi)有被借出過(guò)的圖書的信息。當(dāng)前第172頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)單表查詢下面練習(xí)單表查詢的方法。簡(jiǎn)單查詢使用TOP關(guān)鍵字使用DISTINCT關(guān)鍵字使用ORDERBY子句對(duì)查詢的結(jié)果進(jìn)行排序當(dāng)前第173頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)單表查詢條件查詢使用BETWEENAND謂詞使用IN謂詞使用LIKE謂詞當(dāng)前第174頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)簡(jiǎn)單查詢從Northwind數(shù)據(jù)庫(kù)的Employees表中分別檢索出雇員的所有信息,以及僅查詢雇員號(hào)、姓和名。SELECT*FROMEmployeesSELECTemployeeID,Lastname,FirstnameFROMEmployees當(dāng)前第175頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)簡(jiǎn)單查詢?nèi)缫樵儠r(shí)改變列標(biāo)題的顯示,則從Employees表中分別檢索出雇員號(hào)、姓、名并分別加上‘雇員號(hào)’、‘姓’、‘名’等標(biāo)題信息。當(dāng)前第176頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用TOP關(guān)鍵字分別從Employees中檢索出前2條及前面50%的雇員的信息。SELECTtop2*FROMEmployeesSELECTtop50percent*FROMEmployees當(dāng)前第177頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用DISTINCT關(guān)鍵字從Suppliers表中檢索出country并且要求顯示不重復(fù)。USENorthwindSELECTDISTINCTcountryFROMSuppliersORDERBYcountryGO當(dāng)前第178頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用ORDERBY子句對(duì)查詢的結(jié)果進(jìn)行排序
使用ORDERBY語(yǔ)句可以對(duì)查詢的結(jié)果進(jìn)行排序,ASC、DESC分別是升序和降序排列的關(guān)鍵字,系統(tǒng)默認(rèn)的是升序排列。從Products表中查詢productid、productname、categoryid、unitpriceproductid,并按categoryid的升序和unitprice降序排列。當(dāng)前第179頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)使用ORDERBY子句對(duì)查詢的結(jié)果進(jìn)行排序USENorthwindSELECTproductid,productname,categoryid,unitpriceFROMProductsORDERBYcategoryid,unitpriceDESCGO當(dāng)前第180頁(yè)\共有195頁(yè)\編于星期五\0點(diǎn)條件查詢使用關(guān)系運(yùn)算符:從Employees表中查詢出來(lái)自美國(guó)的雇員姓和所在城市。USENorthwindSELECTlastname,cityFROMemployeesWHEREcountry=
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教部編版歷史九年級(jí)下冊(cè):第11課 《蘇聯(lián)的社會(huì)主義建設(shè)》 聽(tīng)課評(píng)課記錄
- 《溝通中外文明的“絲綢之路”》名師聽(tīng)課評(píng)課記錄(新部編人教版七年級(jí)上冊(cè)歷史)
- 生物醫(yī)藥產(chǎn)業(yè)園監(jiān)理合同(2篇)
- 電力價(jià)格調(diào)整合同(2篇)
- 五年級(jí)上冊(cè)數(shù)學(xué)聽(tīng)評(píng)課記錄《7.1 誰(shuí)先走》(3)-北師大版
- 部編人教版歷史九年級(jí)上冊(cè)第15課《探尋新航路》聽(tīng)課評(píng)課記錄
- 湘教版數(shù)學(xué)八年級(jí)上冊(cè)《小結(jié)練習(xí)》聽(tīng)評(píng)課記錄5
- 人教版數(shù)學(xué)七年級(jí)上冊(cè)3.2《解一元一次方程(一)-合并同類項(xiàng)與移項(xiàng)》聽(tīng)評(píng)課記錄1
- 五年級(jí)上冊(cè)數(shù)學(xué)聽(tīng)評(píng)課記錄-總復(fù)習(xí)2-北師大版
- 新版湘教版秋八年級(jí)數(shù)學(xué)上冊(cè)第二章三角形課題三角形的內(nèi)角和定理聽(tīng)評(píng)課記錄
- 必修3《政治與法治》 選擇題專練50題 含解析-備戰(zhàn)2025年高考政治考試易錯(cuò)題(新高考專用)
- 二零二五版電商企業(yè)兼職財(cái)務(wù)顧問(wèn)雇用協(xié)議3篇
- 課題申報(bào)參考:流視角下社區(qū)生活圈的適老化評(píng)價(jià)與空間優(yōu)化研究-以沈陽(yáng)市為例
- 《openEuler操作系統(tǒng)》考試復(fù)習(xí)題庫(kù)(含答案)
- 17J008擋土墻(重力式、衡重式、懸臂式)圖示圖集
- 2024-2025學(xué)年人教版生物八年級(jí)上冊(cè)期末綜合測(cè)試卷
- 大數(shù)據(jù)背景下網(wǎng)絡(luò)輿情成因及治理
- 道教系統(tǒng)諸神仙位寶誥全譜
- 中國(guó)經(jīng)濟(jì)轉(zhuǎn)型導(dǎo)論-政府與市場(chǎng)的關(guān)系課件
- 新視野大學(xué)英語(yǔ)讀寫教程 第三版 Book 2 unit 8 教案 講稿
- 村務(wù)公開(kāi)表格
評(píng)論
0/150
提交評(píng)論