數(shù)據(jù)庫演示文稿_第1頁
數(shù)據(jù)庫演示文稿_第2頁
數(shù)據(jù)庫演示文稿_第3頁
數(shù)據(jù)庫演示文稿_第4頁
數(shù)據(jù)庫演示文稿_第5頁
已閱讀5頁,還剩190頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

數(shù)據(jù)庫演示文稿當(dāng)前1頁,總共195頁。優(yōu)選數(shù)據(jù)庫當(dāng)前2頁,總共195頁。學(xué)習(xí)目標數(shù)據(jù)庫系統(tǒng)作為數(shù)據(jù)存儲的倉庫,同時還需要擔(dān)當(dāng)起數(shù)據(jù)管理、維護的角色。當(dāng)前3頁,總共195頁。學(xué)習(xí)目標包括數(shù)據(jù)的入庫和出庫,前面學(xué)習(xí)了數(shù)據(jù)入庫時需要作的相應(yīng)工作,在本章中,將學(xué)習(xí)如何在數(shù)據(jù)庫中查找數(shù)據(jù)并將該部分數(shù)據(jù)“出庫”,使這些數(shù)據(jù)以一定的格式和排列方法展現(xiàn)給用戶,并且掌握如何增加檢索數(shù)據(jù)易讀性的方法,比如排序在此基礎(chǔ)上,還將學(xué)習(xí)更加復(fù)雜的技巧——分組與匯總。當(dāng)前4頁,總共195頁。學(xué)習(xí)目標掌握這些的單表查詢技巧,將為應(yīng)用程序提供最強的數(shù)據(jù)層的支持,減少邏輯層的負擔(dān)。結(jié)合以前學(xué)習(xí)的主鍵和外鍵等基礎(chǔ)知識,通過本章學(xué)習(xí),將逐步掌握按照功能需求熟練檢索出符合要求的數(shù)據(jù)并將其按照指定格式展現(xiàn)給用戶或者應(yīng)用程序。當(dāng)前5頁,總共195頁。本章要點簡單查詢語句查詢語句的統(tǒng)計功能數(shù)據(jù)的聯(lián)接子查詢當(dāng)前6頁,總共195頁。簡單查詢語句在創(chuàng)建查詢時,需要輸入相應(yīng)的查詢語句?;镜腟ELECT語句選擇數(shù)據(jù)列使用TOP和DISTINCT使用列別名當(dāng)前7頁,總共195頁。簡單查詢語句使用計算列使用WHERE子句使用ORDERBY子句當(dāng)前8頁,總共195頁?;镜腟ELECT語句先看一個最簡單的查詢實例?!纠?-1】查詢Readers表中所有記錄的信息(光盤:\源文件\第4章\例4-1)。當(dāng)前9頁,總共195頁?;镜腟ELECT語句USELibraryGOSELECT*FROMReadersGO在查詢分析器中輸入并運行上述代碼。當(dāng)前10頁,總共195頁。最簡單的查詢語句當(dāng)前11頁,總共195頁?;镜腟ELECT語句例4-1中的SELECT語句的作用就是查詢Readers表中的全部信息,其中*表示查詢表中的所有字段,此時,顯示結(jié)果集中的列的順序和創(chuàng)建表時的順序一致。當(dāng)然,要顯示指定的列,也可以將所有的列名在SELECT關(guān)鍵字后列出。當(dāng)前12頁,總共195頁。選擇數(shù)據(jù)列如果要查詢表中的部分列,可以將要顯示的列名在SELECT關(guān)鍵字后依次列出,列名與列名之間用英文逗號隔開,列的順序可以根據(jù)需要指定?!纠?-2】查詢Readers表中所有讀者的編號、姓名和登記日期(光盤:\源文件\第4章\例4-2)。當(dāng)前13頁,總共195頁。選擇數(shù)據(jù)列USELibraryGOSELECT讀者編號,姓名,登記日期FROMReadersGO在查詢分析器中輸入并運行上述代碼。當(dāng)前14頁,總共195頁。在表中選擇數(shù)據(jù)列查詢當(dāng)前15頁,總共195頁。使用TOP和DISTINCT使用TOP子句使用DISTINCT子句當(dāng)前16頁,總共195頁。使用TOP子句在查詢表中數(shù)據(jù)時,用戶可以根據(jù)需要限制返回的行數(shù)。方法是在SELECT語句的字段列表前面使用TOPn子句,則查詢結(jié)果中只顯示表中前n條記錄;如果在字段列表前使用TOPnPERCENT子句,則查詢結(jié)果中只顯示前n%條記錄。當(dāng)前17頁,總共195頁。使用TOP子句【例4-3】查詢Readers表中的前5條記錄(光盤:\源文件\第4章\例4-3)。USELibraryGOSELECTTOP5*FROMReadersGO當(dāng)前18頁,總共195頁。使用TOP子句在查詢分析器中輸入并運行上述代碼,執(zhí)行結(jié)果如下。當(dāng)前19頁,總共195頁。使用DISTINCT子句對表只選擇部分列查詢時,可能會出現(xiàn)重復(fù)行。如果要消除結(jié)果集中的重復(fù)行,可以在字段列表前面加上DISTINCT關(guān)鍵字?!纠?-4】查詢Books表中所有的出版社(光盤:\源文件\第4章\例4-4)。當(dāng)前20頁,總共195頁。使用DISTINCT子句USELibraryGOSELECT出版社FROMBooksGO上述代碼的執(zhí)行結(jié)果如下圖,可以看出結(jié)果集中有重復(fù)行。當(dāng)前21頁,總共195頁。

沒有消除重復(fù)行的查詢當(dāng)前22頁,總共195頁。使用DISTINCT子句下面的代碼就消除了重復(fù)行,執(zhí)行結(jié)果如下圖所示。USELibraryGOSELECTDISTINCT出版社FROMBooksGO當(dāng)前23頁,總共195頁。消除重復(fù)行的查詢當(dāng)前24頁,總共195頁。使用列別名默認結(jié)果集中顯示的列標題就是在創(chuàng)建表時使用的列名。但是,有時也可以給列標題指定別名,以增加結(jié)果集的可讀性。為結(jié)果集的列標題指定別名,可以使用以下兩種格式。當(dāng)前25頁,總共195頁。使用列別名SELECT列別名=原列名FROM數(shù)據(jù)源SELECT原列名AS列別名FROM數(shù)據(jù)源當(dāng)前26頁,總共195頁。使用列別名【例4-5】查詢BookCateGory表中所有記錄的類編號和類名稱。其中“類編號”列標題指定別名為“圖書種類編號”,“類名稱”列標題指定別名為“圖書種類名稱”(光盤:\源文件\第4章\例4-5)。當(dāng)前27頁,總共195頁。使用列別名USELibraryGOSELECT類編號AS圖書種類編號,類名稱AS圖書種類名稱FROMBookCateGOryGO在查詢分析器中輸入并運行上述代碼。當(dāng)前28頁,總共195頁。使用列別名當(dāng)前29頁,總共195頁。使用計算列使用SELECT語句對列進行查詢時,在結(jié)果中可以輸出對列值計算后的值,即結(jié)果集中的列不是表中現(xiàn)成的列,而是由表中的一個或多個列計算出來的?!纠?-6】查詢Books表中每本書的書名和打過8折以后的價格(光盤:\源文件\第4章\例4-6)。當(dāng)前30頁,總共195頁。使用計算列USELibraryGOSELECT圖書名,價格*0.8AS折后價格FROMBooksGO當(dāng)前31頁,總共195頁。使用計算列因為結(jié)果集中由計算得到的列是沒有列名的,所以本例中為其指定列名為“折后價格”,以增加結(jié)果集的可讀性。在查詢分析器中輸入并運行上述代碼。當(dāng)前32頁,總共195頁。使用計算列當(dāng)前33頁,總共195頁。使用WHERE子句如果只希望得到表中滿足特定條件的一些記錄,用戶可以在查詢語句中使用WHERE子句。在WHERE子句中,組成條件表達式的運算符有6種。當(dāng)前34頁,總共195頁。WHERE子句中的運算符運算符分類運算符意義比較運算符>、>=、=、<、<=、<>、!=、!>、!<比較大小范圍運算符BETWEEN…AND判斷列值是否在指定范圍內(nèi)NOTBETWEEN…AND列表運算符IN判斷列值是否為列表中的指定值NOTIN當(dāng)前35頁,總共195頁。WHERE子句中的運算符運算符分類運算符意義模式匹配符LIKE判斷列值是否與指定的字符通配格式相符NOTLIKE空值運算符ISNULL判斷列值是否為空NOTISNULL邏輯運算符AND用于多條件的邏輯連接ORNOT當(dāng)前36頁,總共195頁。使用WHERE子句下面舉例說明WHERE子句中運算符的使用方法。比較運算符范圍運算符當(dāng)前37頁,總共195頁。使用WHERE子句列表運算符模式匹配運算符空值運算符邏輯運算符當(dāng)前38頁,總共195頁。比較運算符比較運算符用來比較兩個表達式的大小,它包括:>、>=、=、<、<=、<>、!=、!>和!<,其中“<>”或“!=”表示不等于,“!>”表示不大于,“!<”表示不小于。當(dāng)前39頁,總共195頁。比較運算符【例4-7】查詢Books表中價格大于等于20元的圖書的編號、圖書名、作者以及價格(光盤:\源文件\第4章\例4-7)。當(dāng)前40頁,總共195頁。USELibraryGOSELECT圖書編號,圖書名,作者,價格FROMBooksWHERE價格>=20GO當(dāng)前41頁,總共195頁。比較運算符在查詢分析器中輸入并運行上述代碼,執(zhí)行結(jié)果如下圖。當(dāng)前42頁,總共195頁。范圍運算符范圍運算符用來判斷列值否在指定的范圍內(nèi)。范圍運算符包括BETWEEN…AND和NOTBETWEEN…AND。該運算符的語法格式如下:列表達式[NOT]BETWEEN起始值A(chǔ)ND終止值當(dāng)前43頁,總共195頁。范圍運算符如果列表達式的值在起始值和終止值之間,則運算結(jié)果為TRUE,否則為FALSE。使用NOT時,運算結(jié)果剛好相反。當(dāng)前44頁,總共195頁。范圍運算符【例4-8】查詢Books表中在2005年期間上架的圖書的編號、圖書名、作者及上架時間(光盤:\源文件\第4章\例4-8)。當(dāng)前45頁,總共195頁。指定查詢范圍當(dāng)前46頁,總共195頁。列表運算符列表運算符用來判斷給定的列值是否在所給定的子列表中。列表運算符包括IN和NOTIN。該運算符的語法格式如下:列表達式[NOT]IN(列值1,…列值n)當(dāng)前47頁,總共195頁。列表運算符如果列表達式的值等于子列表中的某個值,則運算結(jié)果為TRUE,否則運算結(jié)果為FALSE。使用NOT時,運算結(jié)果剛好相反?!纠?-9】查詢Books表中飛天、新宇兩個出版社的圖書的編號、圖書名及出版社(光盤:\源文件\第4章\例4-9)。當(dāng)前48頁,總共195頁。使用IN確定查詢值當(dāng)前49頁,總共195頁。模式匹配運算符在實際應(yīng)用中,經(jīng)常需要根據(jù)一些不確定的信息來進行模糊查詢。模式匹配運算符LIKE和NOTLIKE可以實現(xiàn)這類查詢,其中LIKE表示字符串表達式的值與匹配串相符,NOTLIKE則相反。其一般語法格式如下:字符串表達式[NOT]LIKE'<匹配串>'當(dāng)前50頁,總共195頁。模式匹配運算符其中匹配串可以是一個完整的字符串,也可以是含有通配符的字符串。當(dāng)前51頁,總共195頁。通配符說明通配符說明%代表0個或多個字符_(下劃線)代表單個字符[]指定范圍(如[a-f]、[0-9])或集合(如[abcdef])中的任何單個字符[^]指定不屬于范圍(如[^a-f]、[^0-9])或集合(如[^abcdef])中的任何單個字符當(dāng)前52頁,總共195頁。模式匹配運算符【例4-10】查詢Readers表中姓“張”的讀者的信息(光盤:\源文件\第4章\例4-10)。通配符字符串'張%'的含義是第一個漢字是“張”的字符串。當(dāng)前53頁,總共195頁。模糊查詢當(dāng)前54頁,總共195頁。空值運算符數(shù)據(jù)庫中的數(shù)據(jù)一般都應(yīng)該是有意義的,但有些列的值可能暫時不知道或不確定,這時可以不輸入該列的值,那么稱該列的值為空值,通常用NULL表示??罩蹬c0或空格是不一樣的??罩颠\算符ISNULL和NOTISNULL用來判斷指定的列值是否為空。當(dāng)前55頁,總共195頁??罩颠\算符其語法格式如下:列表達式[NOT]ISNULL【例4-11】查詢Readers表中住址為空的讀者的編號、姓名、性別和住址(光盤:\源文件\第4章\例4-11)。在查詢分析器中輸入并運行上述代碼。當(dāng)前56頁,總共195頁。查詢空值當(dāng)前57頁,總共195頁。邏輯運算符用戶可以使用邏輯運算符AND、OR和NOT連接多個查詢條件,實現(xiàn)多重條件查詢。邏輯運算符語法格式如下:[NOT]邏輯表達式AND|OR[NOT]邏輯表達式當(dāng)前58頁,總共195頁。邏輯運算符【例4-12】要求用邏輯運算符實現(xiàn)例4-8中的查詢(光盤:\源文件\第4章\例4-12)。當(dāng)前59頁,總共195頁。邏輯運算符USELibraryGOSELECT圖書編號,圖書名,作者,上架時間FROMBooksWHERE上架時間>='2005-01-01'AND上架時間<='2005-12-31'GO當(dāng)前60頁,總共195頁。邏輯運算符上述代碼的執(zhí)行結(jié)果和例4-8相同。當(dāng)前61頁,總共195頁。邏輯運算符【例4-13】要求用邏輯運算符實現(xiàn)例4-9中的查詢(光盤:\源文件\第4章\例4-13)。USELibraryGOSELECT圖書編號,圖書名,出版社當(dāng)前62頁,總共195頁。邏輯運算符FROMBooksWHERE出版社='飛天'OR出版社='新宇'GO上述代碼的執(zhí)行結(jié)果和例4-9相同。當(dāng)前63頁,總共195頁。使用IN確定查詢值當(dāng)前64頁,總共195頁。使用ORDERBY子句通常查詢結(jié)果集中的記錄的順序是它們在表中的順序,但有時用戶希望查詢結(jié)果集中的記錄按某種順序顯示??梢酝ㄟ^ORDEYBY子句改變查詢結(jié)果集中記錄的顯示順序。ORDERBY子句的語法格式為:ORDERBY{列名[ASC|DESC]}[,…n]當(dāng)前65頁,總共195頁。使用ORDERBY子句其中ASC表示按升序排列,DESC按降序排列,默認為ASC。當(dāng)按多列排序時,先按寫在前面的列排序,當(dāng)前面的列值相同時,再按后面的列排序。當(dāng)前66頁,總共195頁。使用ORDERBY子句【例4-14】查詢Books表中“新宇”出版社圖書的編號、圖書名、出版社、類編號及上架時間。查詢結(jié)果先按類編號降序排列,類編號相同的書再按上架時間升序排列(光盤:\源文件\第4章\例4-14)。當(dāng)前67頁,總共195頁。將查詢結(jié)果排序當(dāng)前68頁,總共195頁。查詢語句的統(tǒng)計功能用戶經(jīng)常需要對查詢結(jié)果集進行統(tǒng)計,例如求和、平均值、最大值、最小值和個數(shù)等,這些統(tǒng)計可以通過以下3種方法實現(xiàn)。使用聚合函數(shù)。使用GROUPBY子句。使用COMPUTE子句。當(dāng)前69頁,總共195頁。查詢語句的統(tǒng)計功能使用聚合函數(shù)使用GROUPBY子句使用COMPUTE子句當(dāng)前70頁,總共195頁。使用聚合函數(shù)聚合函數(shù)用來對查詢結(jié)果集中的記錄進行統(tǒng)計計算,并在結(jié)果集中將統(tǒng)計結(jié)果生成一條新記錄。SQLServer2000提供了許多聚合函數(shù)。當(dāng)前71頁,總共195頁。常用集合函數(shù)表函數(shù)名語法格式功能說明AVGAVG([ALL|DISTINCT]列名)計算一個數(shù)值列的平均值SUMSUM([ALL|DISTINCT]列名)計算一個數(shù)值列的總和MAXMAX([ALL|DISTINCT]列名)返回指定列中的最大值MINMIN([ALL|DISTINCT]列名)返回指定列中的最小值COUNTCOUNT([ALL|DISTINCT]列名|*)統(tǒng)計查詢結(jié)果集中記錄的個數(shù)當(dāng)前72頁,總共195頁。使用聚合函數(shù)表4-3語法格式中的DISTINCT表示去掉指定列中的重復(fù)值,ALL表示不取消重復(fù)值,默認是ALL?!纠?-15】計算Books表中所有圖書的平均價格、總價、最高價、最低價及記錄的個數(shù)(光盤:\源文件\第4章\例4-15)。當(dāng)前73頁,總共195頁。聚合函數(shù)的使用當(dāng)前74頁,總共195頁。使用GROUPBY子句GROUPBY子句用于對結(jié)果集進行分組并對每一組數(shù)據(jù)進行匯總計算。其語法格式為:GROUPBY列名[HAVING條件表達式]當(dāng)前75頁,總共195頁。使用GROUPBY子句GROUPBY按“列名”指定的列進行分組,將該列列值相同的記錄組成一組,對每一組進行匯總計算。每一組生成一條記錄。若有“HAVING條件表達式”選項,則表示對生成的組進行篩選。當(dāng)前76頁,總共195頁。使用GROUPBY子句【例4-16】統(tǒng)計Books表中各個出版社的圖書數(shù)量(光盤:\源文件\第4章\例4-16)。在查詢分析器中輸入并運行上述代碼。當(dāng)前77頁,總共195頁。分組統(tǒng)計當(dāng)前78頁,總共195頁。使用GROUPBY子句【例4-17】對例4-16中的代碼改為以下代碼,則只顯示圖書數(shù)量大于10的匯總行(光盤:\源文件\第4章\例4-17)。在查詢分析器中輸入并運行上述代碼。當(dāng)前79頁,總共195頁。對分組統(tǒng)計進行篩選當(dāng)前80頁,總共195頁。使用COMPUTE子句COMPUTE子句對查詢結(jié)果集進行匯總統(tǒng)計,并顯示參加匯總記錄的詳細信息。其語法格式為:COMPUTE聚合函數(shù)[BY列名]當(dāng)前81頁,總共195頁。使用COMPUTE子句COMPUTEBY子句與GROUPBY子句的功能類似,都可以對查詢結(jié)果集進行分組統(tǒng)計,不同的是,COMPUTEBY子句不僅顯示匯總數(shù)據(jù),還分組顯示參加匯總的記錄的詳細信息,而GROUPBY子句僅顯示匯總數(shù)據(jù)。當(dāng)前82頁,總共195頁。使用COMPUTE子句【例4-18】統(tǒng)計Books表中各出版社的圖書數(shù)量,并顯示參加匯總的記錄的詳細信息(光盤:\源文件\第4章\例4-18)。在查詢分析器中輸入并運行上述代碼,其執(zhí)行結(jié)果如下圖。由于記錄個數(shù)較多,所以該圖只顯示出部分出版社的統(tǒng)計信息。當(dāng)前83頁,總共195頁。使用COMPUTE子句當(dāng)前84頁,總共195頁。使用COMPUTE子句從上圖可以看出,COMPUTE子句產(chǎn)生附加的匯總行,其列標題是系統(tǒng)自定的,如對于COUNT函數(shù)為cnt,對于AVG函數(shù)為avg,對于SUM函數(shù)為sum。當(dāng)前85頁,總共195頁。數(shù)據(jù)的連接前面講的查詢都是針對一個表進行的,而在實際應(yīng)用中,一個查詢往往需要從多個表中檢索數(shù)據(jù),這就需要使用聯(lián)接查詢。聯(lián)接分為交叉聯(lián)接、內(nèi)聯(lián)接、外聯(lián)接和自聯(lián)接4種。下面分別進行介紹。當(dāng)前86頁,總共195頁。數(shù)據(jù)的連接交叉聯(lián)接內(nèi)聯(lián)接外聯(lián)接自聯(lián)接合并結(jié)果集當(dāng)前87頁,總共195頁。

交叉聯(lián)接交叉聯(lián)接又稱非限制聯(lián)接(廣義笛卡爾積),它將兩個表不加任何約束地組合在一起,也就是將第一個表的所有記錄分別與第二個表的每條記錄拼接組成新記錄,聯(lián)接后結(jié)果集的行數(shù)就是兩個表的行的乘積,結(jié)果集的列數(shù)就是兩個表的列數(shù)之和。當(dāng)前88頁,總共195頁。

交叉聯(lián)接交叉聯(lián)接有以下兩種語法格式。SELECT列名列表FROM表名1CROSSJOIN表名2SELECT列名列表FROM表名l,表名2當(dāng)前89頁,總共195頁。交叉聯(lián)接【例4-19】假設(shè)數(shù)據(jù)庫Library中又創(chuàng)建了tl和t2兩個表,如圖4-18所示。tl表中有“讀者編號”和“姓名”兩字段,t2表中有“讀者編號”和“已借冊數(shù)”兩字段,兩表各包含3條記錄。用交叉連接方法聯(lián)接兩表,觀察聯(lián)接后的結(jié)果。(光盤:\源文件\第4章\例4-19)當(dāng)前90頁,總共195頁。t1表和t2表當(dāng)前91頁,總共195頁。交叉聯(lián)接USELibraryGOSELECT*FROMt1CROSSJOINt2GO在查詢分析器中輸入并運行上述代碼,其執(zhí)行結(jié)果如下圖。當(dāng)前92頁,總共195頁。交叉聯(lián)接當(dāng)前93頁,總共195頁。交叉聯(lián)接在實際應(yīng)用中,使用交叉聯(lián)接產(chǎn)生的結(jié)果集一般沒有什么意義,但在數(shù)據(jù)庫的數(shù)學(xué)模式上有重要的作用。當(dāng)前94頁,總共195頁。內(nèi)聯(lián)接內(nèi)聯(lián)接是將兩個表中滿足聯(lián)接條件的記錄組合在一起。聯(lián)接條件的一般格式為:ON[<表名1>.]<列名><比較運算符>[<表名2>.]<列名>參數(shù)說明如下所示。比較運算符可以是>、>=、=、<、<=、<>、!=、!>及!<。當(dāng)前95頁,總共195頁。內(nèi)聯(lián)接當(dāng)比較運算符為“=”時,稱為等值聯(lián)接。若在等值聯(lián)接的結(jié)果集中去除相同的列,則為自然聯(lián)接。使用除“=”外運算符的聯(lián)接為非等值聯(lián)接。在實際應(yīng)用中,聯(lián)接條件通常采用“on主鍵=外鍵”的形式。當(dāng)前96頁,總共195頁。內(nèi)聯(lián)接內(nèi)聯(lián)接有以下兩種語法格式。第一種格式:SELECT列名列表FROM表名l[INNER]JOIN表名2ON表名1.列名=表名2.列名第二種格式:SELECT列名列表FROM表名l,表名2WHERE表名1.列名=表名2.列名當(dāng)前97頁,總共195頁。內(nèi)聯(lián)接參數(shù)說明如下所示。內(nèi)聯(lián)接是系統(tǒng)默認的聯(lián)接,INNER選項可以省略。當(dāng)前98頁,總共195頁。內(nèi)聯(lián)接若SELECT子句中有同名列,則必須用“表名.列名”來表示。為了方便使用,可以給表名定義別名。別名是在FROM子句中指定的,格式為“表名AS別名”或“表名別名”。若為表指定了別名,則只能用“別名.列名”來表示同名列,不能用“表名.列名”表示。當(dāng)前99頁,總共195頁。內(nèi)聯(lián)接【例4-20】用內(nèi)聯(lián)接方法聯(lián)接tl和t2兩表,不去除重復(fù)列(讀者編號)。觀察聯(lián)接后的結(jié)果集與交叉聯(lián)接有何區(qū)別(光盤:\源文件\第4章\例4-20)。當(dāng)前100頁,總共195頁。內(nèi)聯(lián)接USELibraryGOSELECT*FROMt1JOINt2ONt1.讀者編號=t2.讀者編號GO當(dāng)前101頁,總共195頁。內(nèi)聯(lián)接在查詢分析器中輸入并運行上述代碼,其執(zhí)行結(jié)果如下圖??梢钥吹街挥袧M足聯(lián)接條件的記錄才被拼接到結(jié)果集中,結(jié)果集是兩個表中記錄的交集。當(dāng)前102頁,總共195頁。有重復(fù)列的內(nèi)聯(lián)接當(dāng)前103頁,總共195頁。內(nèi)聯(lián)接【例4-21】用內(nèi)聯(lián)接方法聯(lián)接tl和t2兩表,去除重復(fù)列(讀者編號)(光盤:\源文件\第4章\例4-21)。當(dāng)前104頁,總共195頁。內(nèi)聯(lián)接USELibraryGOSELECTa.讀者編號,姓名,已借冊數(shù)FROMt1aJOINt2bONa.讀者編號=b.讀者編號GO當(dāng)前105頁,總共195頁。內(nèi)聯(lián)接在查詢分析器中輸入并運行上述代碼,其執(zhí)行結(jié)果如下圖??梢钥闯鼋Y(jié)果集中不含重復(fù)列(讀者編號),去掉重復(fù)列的等值內(nèi)聯(lián)接則為自然聯(lián)接。自然聯(lián)接是聯(lián)接的主要形式,在實際中應(yīng)用最為廣泛。當(dāng)前106頁,總共195頁。不含重復(fù)列的內(nèi)聯(lián)接當(dāng)前107頁,總共195頁。內(nèi)聯(lián)接也可以用第二種格式的代碼實現(xiàn)上述功能:USELibraryGOSELECTa.讀者編號,姓名,已借冊數(shù)FROMt1a,t2bWHEREa.讀者編號=b.讀者編號GO當(dāng)前108頁,總共195頁。外聯(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頁,總共195頁。左外聯(lián)接左外聯(lián)接的語法格式為:SELECT列名列表FROM表名lLEFT[OUTER]JOIN表名2ON表名1.列名=表名2.列名當(dāng)前110頁,總共195頁。左外聯(lián)接左外聯(lián)接的結(jié)果集中包括了左表的所有記錄,而不僅僅是滿足聯(lián)接條件的記錄。如果左表的某記錄在右表中沒有匹配行,則該記錄在結(jié)果集行中屬于右表的相應(yīng)列值均為NULL。當(dāng)前111頁,總共195頁。左外聯(lián)接【例4-22】用左外聯(lián)接方法聯(lián)接tl和t2兩表。觀察聯(lián)接后所產(chǎn)生的結(jié)果(光盤:\源文件\第4章\例4-22)。在查詢分析器中輸入并運行上述代碼,其執(zhí)行結(jié)果如下圖所示。當(dāng)前112頁,總共195頁。左外聯(lián)接當(dāng)前113頁,總共195頁。右外聯(lián)接右外聯(lián)接的語法格式為:SELECT列名列表FROM表名lRIGHT[OUTER]JOIN表名2ON表名1.列名=表名2.列名當(dāng)前114頁,總共195頁。右外聯(lián)接右外聯(lián)接的結(jié)果集中包括了右表的所有記錄,而不僅僅是滿足聯(lián)接條件的記錄。如果右表的某記錄在左表中沒有匹配行,則該記錄在結(jié)果集行中屬于左表的相應(yīng)列值均為NULL。當(dāng)前115頁,總共195頁。右外聯(lián)接【例4-23】用右外聯(lián)接方法聯(lián)接tl和t2兩表。觀察聯(lián)接后所產(chǎn)生的結(jié)果(光盤:\源文件\第4章\例4-23)。在查詢分析器中輸入并運行上述代碼,其執(zhí)行結(jié)果如下圖。當(dāng)前116頁,總共195頁。右外聯(lián)接當(dāng)前117頁,總共195頁。全外聯(lián)接全外聯(lián)接的語法格式為:SELECT列名列表FROM表名lFULL[OUTER]JOIN表名2ON表名1.列名=表名2.列名當(dāng)前118頁,總共195頁。全外聯(lián)接全外聯(lián)接的結(jié)果集中包括了左表和右表的所有記錄。當(dāng)某記錄在另一個表中沒有匹配記錄時,則另一個表的相應(yīng)列值為NULL?!纠?-24】用全外聯(lián)接方法聯(lián)接tl和t2兩表。觀察聯(lián)接后所產(chǎn)生的結(jié)果(光盤:\源文件\第4章\例4-24)。當(dāng)前119頁,總共195頁。全外聯(lián)接在查詢分析器中輸入并運行上述代碼,其執(zhí)行結(jié)果如下圖所示。當(dāng)前120頁,總共195頁。自聯(lián)接自聯(lián)接就是將一個表與它自身進行聯(lián)接,可看作一個表中的兩個副本之間的內(nèi)聯(lián)接。若要在一個表中查找具有相同列值的行,則可以使用自聯(lián)接。使用自聯(lián)接時,必須為表指定兩個不同的別名,使之在邏輯上成為兩個表。當(dāng)前121頁,總共195頁。自聯(lián)接【例4-25】用自聯(lián)接的方法查詢Books表中“圖書名”相同作者不同的圖書信息。要求只顯示圖書編號、圖書名、作者和出版社(光盤:\源文件\第4章\例4-25)。在查詢分析器中輸入并運行上述代碼,其執(zhí)行結(jié)果如下圖所示。當(dāng)前122頁,總共195頁。自聯(lián)接當(dāng)前123頁,總共195頁。合并結(jié)果集使用UNION語句可以將多個查詢結(jié)果集合并為一個結(jié)果集。UNION子句的語法格式如下:SELECT語句{UNIONSELECT語句}[,…n]當(dāng)前124頁,總共195頁。合并結(jié)果集合并結(jié)果集的基本規(guī)則如下。UNION合并的各結(jié)果集的列數(shù)必須相同,對應(yīng)的數(shù)據(jù)類型也必須兼容。默認情況下系統(tǒng)將自動去掉合并后的結(jié)果集中重復(fù)的行。最后結(jié)果集中的列名來自第一個SELECT語句。當(dāng)前125頁,總共195頁。合并結(jié)果集【例4-26】將Readers表中2004年登記的讀者記錄保存到表Readers_2004中,2005年登記的讀者記錄保存到表Readers_2005中,然后將兩個表的查詢結(jié)果合并為一個結(jié)果集(光盤:\源文件\第4章\例4-26)。當(dāng)前126頁,總共195頁。合并結(jié)果集可以在查詢分析器中輸入上述代碼,并查看執(zhí)行結(jié)果。UNION操作常用于歸檔數(shù)據(jù),例如歸檔月報表為年報表,歸檔各部門數(shù)據(jù)等。注意UNION還可以與ORDERBY、GROUPBY子句一起使用,用來對合并所得的結(jié)果集進行分組或排序。當(dāng)前127頁,總共195頁。子查詢下面介紹相關(guān)子查詢和嵌套子查詢的兩種方式。相關(guān)子查詢嵌套子查詢當(dāng)前128頁,總共195頁。相關(guān)子查詢在相關(guān)子查詢中,子查詢的執(zhí)行依賴于外部查詢,多數(shù)情況下是在子查詢的WHERE子句中引用了外部查詢的表。相關(guān)子查詢的執(zhí)行過程與前面所講的查詢完全不同,前面介紹的子查詢在整個查詢過程中只執(zhí)行一次,而相關(guān)子查詢中的子查詢需要重復(fù)地執(zhí)行。當(dāng)前129頁,總共195頁。相關(guān)子查詢相關(guān)子查詢的執(zhí)行過程是:子查詢?yōu)橥獠坎樵兊拿恳恍袌?zhí)行一次,外部查詢將子查詢引用的外部字段的值傳給子查詢,進行子查詢操作;外部查詢根據(jù)子查詢得到的結(jié)果或結(jié)果集返回滿足條件的結(jié)果行;外部表的每一行都將做相同的處理。當(dāng)前130頁,總共195頁。相關(guān)子查詢【例4-27】查詢Books表中大于該類圖書價格平均值的圖書信息。(光盤:\源文件\第4章\例4-27)當(dāng)前131頁,總共195頁。相關(guān)子查詢與前面介紹過的子查詢不同,該語句中的子查詢無法獨立于外部查詢而得到解決。該子查詢需要一個“類編號”值,而該值是個變量,隨SQLServer檢查Books表中的不同行而改變。下面詳細說明該查詢的執(zhí)行過程:當(dāng)前132頁,總共195頁。相關(guān)子查詢先將Books表的第一條記錄的“類編號”的值“13”代入到子查詢中,則子查詢變?yōu)槿缦滦问剑篠ELECTAVG(價格)FROMBooksASbWHERE類編號=13當(dāng)前133頁,總共195頁。相關(guān)子查詢子查詢的結(jié)果為該類圖書的平均價格,如本例為20.9750,所以外部查詢變?yōu)椋篠ELECT圖書名,作者,出版社,類編號,價格FROMBooksAsaWHERE價格>20.9750當(dāng)前134頁,總共195頁。相關(guān)子查詢?nèi)绻鸚HERE條件為TRUE,則第一條記錄包括在結(jié)果集中,否則不在結(jié)果集中。對Books表中的所有行運行相同的過程,最后形成一個結(jié)果集。當(dāng)前135頁,總共195頁。相關(guān)子查詢當(dāng)前136頁,總共195頁。相關(guān)子查詢在子查詢中,還可以通過運算符EXISTS來判斷子查詢的結(jié)果是否為空表。如果子查詢的結(jié)果集不為空,EXISTS返回TRUE;否則返回FALSE。使用NOTEXIST時其返回值與EXISTS剛好相反。當(dāng)前137頁,總共195頁。相關(guān)子查詢【例4-28】利用EXISTS查詢所有支付過罰金的讀者的信息。(光盤:\源文件\第4章\例4-28)在查詢分析器中輸入并運行上述代碼,其執(zhí)行結(jié)果如下圖所示。當(dāng)前138頁,總共195頁。使用EXISTS運算符的相關(guān)子查詢當(dāng)前139頁,總共195頁。相關(guān)子查詢本例中由EXISTS引出的子查詢屬于相關(guān)子查詢,該查詢與下面用IN表示的非相關(guān)的子查詢返回的結(jié)果一樣:USELibraryGOSELECT*當(dāng)前140頁,總共195頁。相關(guān)子查詢FROMReadersWHERE讀者編號IN(SELECT讀者編號FROMBorrowHistoryWHERE支付罰金>0)GO當(dāng)前141頁,總共195頁。相關(guān)子查詢另外,使用聯(lián)接也可以實現(xiàn)【例4-28】中的查詢,而且聯(lián)接還可以同時顯示來自多個表中的字段,代碼如下:USELibraryGOSELECTa.讀者編號,a.姓名,b.圖書編號,b.支付罰金當(dāng)前142頁,總共195頁。相關(guān)子查詢FROMReadersASaJOINBorrowHistoryASbONa.讀者編號=b.讀者編號WHEREb.支付罰金>0GO在查詢分析器中輸入并運行上述代碼,其執(zhí)行結(jié)果如下圖所示。當(dāng)前143頁,總共195頁。使用聯(lián)接實現(xiàn)例4-28的查詢當(dāng)前144頁,總共195頁。相關(guān)子查詢聯(lián)接和子查詢可能都要涉及兩個或多個表,它們之間的區(qū)別如下。聯(lián)接可以合并兩個或多個表中的數(shù)據(jù),而帶子查詢的SELECT語句的結(jié)果只能來自一個表,子查詢的結(jié)果只是用來作為選擇結(jié)果數(shù)據(jù)時進行參照的。當(dāng)前145頁,總共195頁。相關(guān)子查詢有的查詢既可以使用子查詢來表達,也可以使用聯(lián)接表達。通常使用子查詢表示時可以將一個復(fù)雜的查詢分解為一系列的邏輯步驟,條理清晰,而使用聯(lián)接表示有執(zhí)行速度快的優(yōu)點。因此,在實際應(yīng)用中,讀者應(yīng)根據(jù)具體情況來決定使用哪種方法。當(dāng)前146頁,總共195頁。嵌套子查詢嵌套子查詢的執(zhí)行不依賴于外部查詢。這類子查詢的執(zhí)行過程是:首先執(zhí)行子查詢,子查詢得到的結(jié)果不被顯示出來,而是傳遞給外部查詢,作為外部查詢的條件來使用,然后執(zhí)行外部查詢,并顯示整個查詢結(jié)果。當(dāng)前147頁,總共195頁。嵌套子查詢嵌套子查詢一般可分為兩種:返回單個值的子查詢和返回一個值列表的子查詢,下面分別舉例說明。返回單個值返回一個值列表當(dāng)前148頁,總共195頁。返回單個值該單值常被外部查詢用來進行比較操作?!纠?-29】在Books表中,查詢所有價格高于平均價格的圖書名、作者、出版社和價格。(光盤:\源文件\第4章\例4-29)當(dāng)前149頁,總共195頁。返回單個值本例的執(zhí)行過程是先執(zhí)行子查詢:SELECTAVG(價格)FROMBooks其結(jié)果為23.2050(并不顯示),當(dāng)前150頁,總共195頁。返回單個值再執(zhí)行外部查詢:SELECT圖書名,作者,出版社,價格FROMBooksWHERE價格>23.2050這樣得到本例的結(jié)果如下圖所示。當(dāng)前151頁,總共195頁。返回單值的子查詢當(dāng)前152頁,總共195頁。返回一個值列表如果子查詢返回一個值列表,則該列表常和IN、NOTIN、ANY和ALL邏輯運算符一起構(gòu)成外部查詢的查詢條件。1)IN和NOTIN運算符當(dāng)前153頁,總共195頁。返回一個值列表IN和NOTIN運算符用來將一個表達式的值與子查詢返回的一列值進行比較。使用IN運算符時,如果該表達式的值與此列中的任何一個相等,則IN測試返回TRUE;如果該表達式的值與此列中的任何一個值都不相等,則返回FALSE。使用NOTIN時結(jié)果相反。當(dāng)前154頁,總共195頁。返回一個值列表【例4-30】查詢所有借閱圖書的讀者信息(光盤:\源文件\第4章\例4-30)。在這個例子中,首先得到“SELECT讀者編號FROMBorrow”子查詢的結(jié)果集,它為一列值,即所有借閱讀書的讀者編號,然后將其和IN運算符組成外部查詢的條件執(zhí)行外部查詢,并得到最終結(jié)果。當(dāng)前155頁,總共195頁。使用IN運算符的子查詢當(dāng)前156頁,總共195頁。返回一個值列表2)ANY和ALL運算符ANY運算符要求的語法格式如下:表達式比較運算符ANY(子查詢)當(dāng)前157頁,總共195頁。返回一個值列表ANY運算符通過比較運算符將一個表達式的值與子查詢返回的一列值中的每一個進行比較。只要有一次比較的結(jié)果為TRUE,則ANY測試返回TRUE;若每一次比較的結(jié)果均為FALSE,則ANY測試返回FALSE。當(dāng)前158頁,總共195頁。返回一個值列表如表達式“>ANY(1,2,3)”與“>1”等價。由于比任何一個數(shù)大表達式就成立,所以只要比最小數(shù)大即可。再如,表達式“〈ANY(1,2,3)”與“〈3”等價。由于比任何一個數(shù)小表達式就成立,所以只要比最大數(shù)小即可。當(dāng)前159頁,總共195頁。返回一個值列表【例4-31】在Books表中,查詢“新宇”出版社的圖書中價格比“飛天”出版社最低定價還高的圖書信息(光盤:\源文件\第4章\例4-31)。在查詢分析器中輸入并運行上述代碼,其執(zhí)行結(jié)果如下圖所示。當(dāng)前160頁,總共195頁。使用ANY運算符的子查詢當(dāng)前161頁,總共195頁。返回一個值列表ALL運算符要求的語法格式如下:表達式比較運算符ALL(子查詢)當(dāng)前162頁,總共195頁。返回一個值列表ALL運算符通過比較運算符將一個表達式的值與子查詢返回的一列值中的每一個進行比較。若每一次比較的結(jié)果均為TRUE,則ALL測試返回TRUE;只要有一次比較的結(jié)果為FALSE,則ALL測試返回FALSE。當(dāng)前163頁,總共195頁。返回一個值列表如表達式“>ALL(1,2,3)”與“>3”等價。由于比所有數(shù)都大表達式才成立,所以只要比最大數(shù)大即可。再如,表達式“〈ALL(1,2,3)”與“〈1”等價。由于比所有數(shù)都小表達式才成立,所以只要比最小數(shù)小即可。當(dāng)前164頁,總共195頁。返回一個值列表【例4-32】在Books表中,查詢所有比“飛天”出版社的圖書上架時間都早的圖書信息。(光盤:\源文件\第4章\例4-32)在查詢分析器中輸入并運行上述代碼,其執(zhí)行結(jié)果如下圖所示。當(dāng)前165頁,總共195頁。使用ALL運算符的子查詢當(dāng)前166頁,總共195頁。上機練習(xí)本節(jié)上機練習(xí)將進行圖書管理系統(tǒng)的查詢,通過這個例子,掌握SELECT語句的基本語法、聚合函數(shù)的作用和使用方法,掌握GROUPBY和ORDEYBY子句的使用方法,掌握聯(lián)接查詢和子查詢的表示方法(光盤:\源文件\第4章\上機練習(xí))。當(dāng)前167頁,總共195頁。上機練習(xí)SELECT語句的基本使用數(shù)據(jù)統(tǒng)計聯(lián)接查詢的使用子查詢的使用單表查詢多表查詢當(dāng)前168頁,總共195頁。SELECT語句的基本使用首先使用SELECT語句查詢數(shù)據(jù)庫中的相關(guān)信息。當(dāng)前169頁,總共195頁。數(shù)據(jù)統(tǒng)計數(shù)據(jù)統(tǒng)計的具體操作如下。當(dāng)前170頁,總共195頁。聯(lián)接查詢的使用從Borrow、Books、Readers3個表中,查詢所有借書讀者的姓名、借書名稱、借閱日期、應(yīng)還日期。為了更好地驗證結(jié)果,讀者可先在Readers表中插入一條和表中現(xiàn)有姓名相同的記錄,然后再作練習(xí)。當(dāng)前171頁,總共195頁。子查詢的使用下面將練習(xí)子查詢的使用,具體操作如下。該例是一個相關(guān)子查詢。讀者可以使用NOTIN把它改寫為非相關(guān)的子查詢。同樣,讀者也可以查詢從來沒有被借出過的圖書的信息。當(dāng)前172頁,總共195頁。單表查詢下面練習(xí)單表查詢的方法。簡單查詢使用TOP關(guān)鍵字使用DISTINCT關(guān)鍵字使用ORDERBY子句對查詢的結(jié)果進行排序當(dāng)前173頁,總共195頁。單表查詢條件查詢使用BETWEENAND謂詞使用IN謂詞使用LIKE謂詞當(dāng)前174頁,總共195頁。簡單查詢從Northwind數(shù)據(jù)庫的Employees表中分別檢索出雇員的所有信息,以及僅查詢雇員號、姓和名。SELECT*FROMEmployeesSELECTemployeeID,Lastname,FirstnameFROMEmployees當(dāng)前175頁,總共195頁。簡單查詢?nèi)缫樵儠r改變列標題的顯示,則從Employees表中分別檢索出雇員號、姓、名并分別加上‘雇員號’、‘姓’、‘名’等標題信息。當(dāng)前176頁,總共195頁。使用TOP關(guān)鍵字分別從Employees中檢索出前2條及前面50%的雇員的信息。SELECTtop2*FROMEmployeesSELECTtop50percent*FROMEmployees當(dāng)前177頁,總共195頁。使用DISTINCT關(guān)鍵字從Suppliers表中檢索出country并且要求顯示不重復(fù)。USENorthwindSELECTDISTINCTcountryFROMSuppliersORDERBYcountryGO當(dāng)前178頁,總共195頁。使用ORDERBY子句對查詢的結(jié)果進行排序

使用ORDERBY語句可以對查詢的結(jié)果進行排序,ASC、DESC分別是升序和降序排列的關(guān)鍵字,系統(tǒng)默認的是升序排列。從Products表中查詢productid、productname、categoryid、unitpriceproductid,并按categoryid的升序和unitprice降序排列。當(dāng)前179頁,總共195頁。使用ORDERBY子句對查詢的結(jié)果進行排序USENorthwindSELECTproductid,productname,categoryid,unitpriceFROMProductsORDERBYcategoryid,unitpriceDESCGO當(dāng)前180頁,總共195頁。條件查詢使用關(guān)系運算符:從Employees表中查詢出來自美國的雇員姓和所在城市。USENorthwindSELECTlastname,cityFROMemployeesWHEREcountry='USA'GO當(dāng)前181頁,總共195頁。使用BETWEENAND謂

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論