網(wǎng)絡(luò)數(shù)據(jù)庫(kù)原理與應(yīng)用-第六章_第1頁(yè)
網(wǎng)絡(luò)數(shù)據(jù)庫(kù)原理與應(yīng)用-第六章_第2頁(yè)
網(wǎng)絡(luò)數(shù)據(jù)庫(kù)原理與應(yīng)用-第六章_第3頁(yè)
網(wǎng)絡(luò)數(shù)據(jù)庫(kù)原理與應(yīng)用-第六章_第4頁(yè)
網(wǎng)絡(luò)數(shù)據(jù)庫(kù)原理與應(yīng)用-第六章_第5頁(yè)
已閱讀5頁(yè),還剩101頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第6章數(shù)據(jù)查詢SELECT[ALL︱DISTINCT]<目標(biāo)表達(dá)式>

[,<目標(biāo)表達(dá)式>]…FROM

<表或視圖名>[,<表或視圖名>]…[WHERE

<條件表達(dá)式>]

[GROUPBY

<列名1>

[HAVING

<條件表達(dá)式>]]

[ORDERBY

<列名2>[ASC︱DESC]]6.1顯示表中的所有數(shù)據(jù)6.2顯示一張表上指定列的所有數(shù)據(jù)6.3顯示指定的、帶用戶友好的列標(biāo)題的列6.4用條件來(lái)篩選表中指定的行6.5按指定順序顯示數(shù)據(jù)(排序)6.6對(duì)查詢的結(jié)果進(jìn)行分組計(jì)算6.7用TOP限制結(jié)果集6.8匯總數(shù)據(jù)6.9模糊查詢6.10內(nèi)聯(lián)結(jié)6.11外聯(lián)結(jié)6.12合并查詢結(jié)果集6.13子查詢6.14查詢語(yǔ)句小結(jié)6.1顯示表中的所有數(shù)據(jù)用SELECT子句檢索單個(gè)表中所有的列和行的語(yǔ)法如下:SELECT*FROM表名

提示:可以用星號(hào)(*)來(lái)指定所有列。studentidstudentnamesexdepartmentcityphone0906101張三男經(jīng)管山東泰安

0906102李四男經(jīng)管山東東營(yíng)

0906103王五女經(jīng)管浙江金華

表Student例:顯示數(shù)據(jù)庫(kù)Student的表Student中所有的數(shù)據(jù)。USEStudentGOSELECT*FROMStudentstudentidstudentnamesexdepartmentcityphone0906101張三男經(jīng)管山東泰安

0906102李四男經(jīng)管山東東營(yíng)

0906103王五女經(jīng)管浙江金華

例6-1:顯示數(shù)據(jù)庫(kù)ToyUniverse的表Toys中所有的數(shù)據(jù)。USEToyUniverseGOSELECT*FROMToys結(jié)果如下:cToyIdvToyName……--------------------------------000001RobbytheWhale000002WaterChannelSystem000003ParachuteandRocket………………6.2顯示一張表上指定列的所有數(shù)據(jù)從單個(gè)表中檢索指定列、所有行的SELECT子句的語(yǔ)法如下:SELECT列名[,列名]…FROM[表名]提示:列名也可以是經(jīng)過(guò)計(jì)算的值,包括幾個(gè)列的組合。

studentidstudentnamesexdepartmentcityphone0906101張三男經(jīng)管山東泰安

0906102李四男經(jīng)管山東東營(yíng)

0906103王五女經(jīng)管浙江金華

表Student例:現(xiàn)在需要一張包含所有學(xué)生(student)的姓名、城市、電話號(hào)碼的報(bào)表。USEStudentGOSELECTstudentname,city,phone

FROMStudent結(jié)果如下:studentNameCityPhone------------------------------------------張三山東泰安李四山東東營(yíng)王五浙江金6-2:現(xiàn)在需要一張包含所有接受者(Recipient)的姓名、城市、電話號(hào)碼的報(bào)表。SELECTvFirstName,vLastName,cCity,cPhoneFROMRecipient結(jié)果如下:

vFirstNamevLastNamecCitycPhone--------------------------------------------------------BarbaraJohnsonSunnyvale123-5673CatherineRobertsSanJose445-2256ChristopherDavisHillAvenue556-9087JenniferMartinBrooklyn569-7789………………例:從表toys查詢并返回cToyId、cToyName、mToyRate、siToyQoH及產(chǎn)品的總價(jià)值。UseToyUniverseGoSELECTcToyId,cToyName,mToyRate,siToyQoH,

mToyRate*siToyQoHFROMToys6.3顯示指定的、帶用戶友好的列標(biāo)題的列語(yǔ)法1:SELECT列標(biāo)題=列名[,列名…]FROM[表名]語(yǔ)法2:SELECT列名列標(biāo)題[,列名…]FROM[表名]語(yǔ)法3:SELECT列名AS列標(biāo)題[,列名…]FROM[表名]例6-3:現(xiàn)在需要一張包含所有學(xué)生的姓名、城市、電話號(hào)碼的報(bào)表,用中文顯示列名。USEStudentGOSELECT姓名=StudentName,城市=City,

電話=PhoneFROMStudent或SELECTStudentName‘姓名’,City‘城市’,

Phone‘電話’

FROMStudent結(jié)果如下:姓名城市電話------------------------------------張三山東泰安李四山東東營(yíng)王五浙江金華………………6.4用條件來(lái)篩選表中指定的行按指定的條件檢索并顯示數(shù)據(jù)用SELECT子句檢索并顯示數(shù)據(jù)ISNULL和ISNOTNULL關(guān)鍵字按指定的條件檢索并顯示數(shù)據(jù)SELECT子句的語(yǔ)法如下:SELECT選擇列表FROM表名WHERE條件例6-4:現(xiàn)在需要一張家住在山東泰安的學(xué)生的姓名、城市、電話號(hào)碼的報(bào)表。SELECT姓名=StudentName,城市=City,電話=Phone

FROMStudentWHERECity=‘山東泰安’結(jié)果如下:姓名城市電話------------------------------------張三山東泰安用SELECT子句檢索并顯示數(shù)據(jù)如果根據(jù)多重條件,用SELECT子句檢索并顯示數(shù)據(jù)的語(yǔ)法如下:SELECT選擇列表FROM表名WHERE[NOT]條件1{AND|OR}[NOT]條件2

例6-5:顯示價(jià)格范圍在$15~$20之間的所有玩具的列表。SELECTcToyId,vToyName,mToyRate,siToyQohFROMToysWHEREmToyRate>=15ANDmToyRate<=20結(jié)果如下:cToyIdvToyNamemToyRatesiToyQoh----------------------------------------------------------------000005LightShowLamp15.990058000007TieDyeKit19.990076000009GlamorousDoll18.990039000011SleepingBeautyDoll18.990065000018ChildrenBedroom16.990015000023TinDrum15.990088000027X-90RacersSet19.990077000031LargeDuck17.990088

例6-6:顯示屬于山東泰安和浙江金華的學(xué)生的名字、城市和電話。SELECT姓名=StudentName,城市=City,電話=Phone

FROMStudentWHERECity=‘山東泰安’OR

City=‘浙江金華’

結(jié)果如下:姓名城市電話------------------------------------張三山東泰安王五浙江金華ISNULL和ISNOTNULL關(guān)鍵字用SELECT語(yǔ)句檢索并顯示指定列的值為NULL的那些行的數(shù)據(jù),語(yǔ)法如下:SELECT選擇列表FROM表名WHERE列名IS[NOT]NULL例6-7:顯示沒(méi)有任何附加信息的訂貨的全部信息。SELECT*FROMOrderDetailWHEREvMessageisNULL

結(jié)果如下:cOrderNocToyIdsiQtyvMessagemToyCost------------------------------------------------000001000007239.9800000003000017371.9700000007000006112.9900

6.5按指定順序顯示數(shù)據(jù)(排序)用SELECT子句按給定順序檢索并顯示數(shù)據(jù)的語(yǔ)法如下:SELECT選擇列表FROM表名[ORDERBY

列名|選擇的列的序號(hào)|表達(dá)式[ASC|DESC]

[,列名|選擇的列的序號(hào)|表達(dá)式[ASC|DESC]…]例6-8:顯示所有玩具的名字和價(jià)格。確保價(jià)格最高的玩具顯示在列表的頂部。SELECTvToyNameAS‘ToyName’,mToyRateAS‘ToyRate’FROMToysORDERBYmToyRatedescSELECTvToyNameAS‘ToyName’,mToyRateAS‘ToyRate’FROMToysORDERBY2desc結(jié)果如下:ToyNameToyRate

-----------------------------------------FlowerLovingDoll49.9900VictorianDollhouse43.2500SuperDeluge35.9900RacingTruck35.9900

WaterChannelSystem33.9900……………6.6對(duì)查詢的結(jié)果進(jìn)行分組計(jì)算例6-9:顯示玩具價(jià)格的最大值、最小值和平均值。SELECTMAX(mToyRate),

MIN(mToyRate),

AVG(mToyRate)FROMToys結(jié)果如下:-------------------------------49.99006.990019.9644用SELECT子句在一張表中檢索一列的唯一值的語(yǔ)法如下:SELECTDISTINCT

列名FROM表名例6-10:顯示玩具接收者所屬的所有省份,省份名不應(yīng)該有重復(fù)。SELECTDISTINCTcStateFROMRecipient結(jié)果如下:CState---------California……………GeorgiaSELECT列名[,列名…]FROM表名WHERE搜索條件[GROUPBY[ALL]不包含集合函數(shù)的表達(dá)式[,不包含集合函數(shù)的表達(dá)式…]][HAVING搜索條件]

例6-11:在一次訂貨中,可以訂購(gòu)多個(gè)玩具。顯示包含訂貨代碼和每次訂貨的玩具總價(jià)的報(bào)表。SELECT‘OrderNumber’=cOrderNo,‘TotalCostofToyforanOrder’=SUM(mToyCost)

FROMOrderDetailGROUPBYcOrderNo結(jié)果如下:OrderNumberTotalCostofToyforanOrder------------------------------------------------00000154.970000000286.500000000371.9700………………例6-12:在一次訂貨中,可以訂購(gòu)多個(gè)玩具。顯示包含訂貨代碼和每次訂貨的玩具總價(jià)的報(bào)表。(條件:該次訂貨的玩具總價(jià)超過(guò)$50)SELECT‘OrderNumber’=cOrderNo,‘TotalCostofToyforanOrder’=SUM(mToyCost)

FROMorderdetailGROUPBYcOrderNoHAVINGSUM(mToyCost)>50結(jié)果如下:OrderNumberTotalCostofToyforanOrder

-------------------------------------------------------00000154.970000000286.5000

00000371.9700000005133.9300

00000653.9700

6.7用TOP限制結(jié)果集檢索頂部幾條記錄的SELECT子句的語(yǔ)法如下:SELECT[TOPn[PERCENT]]

列名[,列名…]FROM表名WHERE搜索條件[ORDERBY列名[,列名…]]例6-13:根據(jù)1998年的售出數(shù)量顯示頭5個(gè)“PickoftheMonth”玩具的玩具代碼及銷售量。SELECTTOP5cToyId,iTotalSoldFROMPickOftheMonthWHEREiYear=‘1998’ORDERBYiTotalSolddesc

結(jié)果如下:cToyIdiTotalSold--------------------0000266500

00000356700000115600

000007500000002145006.8匯總數(shù)據(jù)用COMPUTE和COMPUTEBY匯總數(shù)據(jù)語(yǔ)法如下:SELECT列名[,列名…]FROM表名[ORDERBY列名[,列名…]]COMPUTE集合函數(shù)(列名)[BY列名[,列名]…]例6-14(a):顯示一張包含所有訂貨的訂貨代碼、玩具代碼和所有訂貨的玩具價(jià)格的報(bào)表。該報(bào)表只顯示所有訂貨的總計(jì)。SELECTcOrderNo,cToyId,mToyCostFROMOrderDetailOrderbycOrderNoComputeSUM(mToyCost)結(jié)果如下:cOrderNocToyIdmToyCost----------------------------------00000100000739.980000000100000814.990000000200001686.5000………………

sum--------------543.2600例6-14(b):顯示一張包含所有訂貨的訂貨代碼、玩具代碼和所有訂貨的玩具價(jià)格的報(bào)表。該報(bào)表僅顯示每次訂貨的總計(jì)。SELECTcOrderNo,cToyId,mToyCostFROMOrderDetailOrderbycOrderNoComputeSUM(mToyCost)bycOrderNo結(jié)果如下:cOrderNocToyIdmToyCost----------------------------------00000100000739.980000000100000814.9900

sum--------------54.9700cOrderNocToyIdmToyCost-----------------------------------00000200001686.5000

sum--------------86.5000………………

例6-14(c):顯示一張包含所有訂貨的訂貨代碼、玩具代碼和所有訂貨的玩具價(jià)格的報(bào)表。該報(bào)表應(yīng)該既顯示每次訂貨的總計(jì),又顯示所有訂貨的總計(jì)。SELECTcOrderNo,cToyId,mToyCostFROMOrderDetailOrderbycOrderNoComputeSUM(mToyCost)bycOrderNoComputeSUM(mToyCost)結(jié)果如下:cOrderNocToyIdmToyCost----------------------------------00000100000739.980000000100000814.9900

sum--------------54.9700cOrderNocToyIdmToyCost-----------------------------------00000200001686.5000

sum--------------86.5000………………

sum--------------543.26006.9模糊查詢模糊查詢通常用通配符來(lái)實(shí)現(xiàn)。常見(jiàn)的通配符見(jiàn)表。例6-15:顯示所有名字以“S”開(kāi)頭的購(gòu)物者。

SELECTcShopperId,cPassword,vFirstName,vLastNameFROMShopperWHEREvFirstNamelike‘S%’結(jié)果如下:cShopperIdcPasswordvFirstNamevLastName------------------------------------------------------000039supermanSandraAdams000040emerandSarahBaker000041hillsSharonGonzalez000042apartmentShirleyNelson000043loftSusanCarter6.10內(nèi)聯(lián)結(jié)有時(shí),要用單句SELECT語(yǔ)句顯示多張表中的數(shù)據(jù)。為了這個(gè)目的,這些表中必須有一個(gè)對(duì)等的公共列,這稱為簡(jiǎn)單聯(lián)接或內(nèi)聯(lián)接。

內(nèi)聯(lián)接是用比較運(yùn)算符比較要聯(lián)接列的值的聯(lián)接。語(yǔ)法如下:SELECT列名,列名[,列名…]FROM表名1[INNER]JOIN

表名2ON

表名1.引用列名連接操作符表名2.引用列名studentidnameage08069101張三2108069102李四2008069103王五21表table_astudentidspecialtylevel08069101ComputerC-Three08069102EnglishE-Six08069105MathsNull表table_bstudentidnameagespecialtylevel08069101張三21ComputerC-Three08069102李四20EnglishE-Six例:Table_a和table_b進(jìn)行內(nèi)連接。SELECTTable_a.studentid,Table_,Table_a.age,Table_b.specialty,Table_b.levelFROMTable_aINNERJOINTable_bON

Table_a.studentid

=Table_b.studentidstudentidnameagespecialtylevel08069101張三21ComputerC-Three08069102李四20EnglishE-Six例6-16:顯示所有玩具的名稱及其所屬的類別名稱。SELECTToys.vToyName,Category.cCategoryFROMToysINNERJOINCategoryON

Toys.cCategoryId=Category.cCategoryId結(jié)果如下:vToyNamecCategory----------------------------------------RobbytheWhaleActivityWaterChannelSystemActivity………………例6-17:顯示所有玩具的名稱、商標(biāo)名稱和類別名稱。SELECTToys.vToyName,ToyBrand.cBrandName,Category.cCategoryFROMToysASaINNERJOINCategoryASbONa.cCategoryId=b.cCategoryIdINNERJOINToyBrandAScONa.cBrandId=c.cBrandId結(jié)果如下:vToyNamecBrandNamecCategory--------------------------------------------------------RobbytheWhaleBobbyActivityWaterChannelSystemBobbyActivityParachuteandRocketTheBernieKidsActivitySuperDelugeLAMOBILActivityLightShowLampBobbyDollsGlamorousDollBobbyDolls………………6.11外聯(lián)結(jié)有時(shí),你可能需要顯示一張表的全部記錄和另一張表的部分記錄,這種類型的聯(lián)接稱為外聯(lián)接。外聯(lián)接可以是左向外聯(lián)接、右向外聯(lián)接或完整外部聯(lián)接。左向外聯(lián)接LEFTJOIN或LEFTOUTERJOIN。左向外聯(lián)接的結(jié)果集包括LEFTOUTER子句中指定的左表(第一個(gè)表)的所有行和另一張表中所有的匹配行,而不僅僅是聯(lián)接列所匹配的行。如果左表的某行在右表中沒(méi)有匹配行,則在相關(guān)聯(lián)的結(jié)果集行中右表的所有選擇列表列均為空值。右向外聯(lián)接RIGHTJOIN或RIGHTOUTERJOIN。右向外聯(lián)接是左向外聯(lián)接的反向聯(lián)接,將返回右表(第二個(gè)表)的所有行和另一張表中所有的匹配行。如果右表的某行在左表中沒(méi)有匹配行,則將為左表返回空值。完整外部聯(lián)接FULLJOIN或FULLOUTERJOIN。完整外部聯(lián)接返回左表和右表中的所有行。當(dāng)某行在另一個(gè)表中沒(méi)有匹配行時(shí),則另一個(gè)表的選擇列表列包含空值。如果表之間有匹配行,則整個(gè)結(jié)果集行包含基表的數(shù)據(jù)值。語(yǔ)法如下:SELECT列名,列名[,列名]FROM表名1LEFT[RIGHT|FULL][OUTER]

JOIN

表名2ON

表名1.引用列名連接操作符表名2.引用列名

studentidnameage08069101張三2108069102李四2008069103王五21表table_astudentidspecialtylevel08069101ComputerC-Three08069102EnglishE-Six08069105MathsNull表table_bstudentidnameagespecialtylevel08069101張三21ComputerC-Three08069102李四20EnglishE-Six08069103王五21NullNull例:Table_a和table_b進(jìn)行左向外連接。SELECTTable_a.studentid,Table_,Table_a.age,Table_b.specialty,Table_b.levelFROMTable_aLEFTOUTERJOINTable_bON

Table_a.studentid

=Table_b.studentidstudentidnameagespecialtylevel08069101張三21ComputerC-Three08069102李四20EnglishE-Six08069103王五21NullNullstudentidnameage08069101張三2108069102李四2008069103王五21表table_astudentidspecialtylevel08069101ComputerC-Three08069102EnglishE-Six08069105MathsNull表table_bstudentidnameagespecialtylevel08069101張三21ComputerC-Three08069102李四20EnglishE-Six08069105NullNullMathsNull例:Table_a和table_b進(jìn)行右向外連接。SELECTTable_a.studentid,Table_,Table_a.age,Table_b.specialty,Table_b.levelFROMTable_aRIGHTOUTERJOINTable_bON

Table_a.studentid

=Table_b.studentidstudentidnameagespecialtylevel08069101張三21ComputerC-Three08069102李四20EnglishE-Six08069105NullNullMathsNullstudentidnameage08069101張三2108069102李四2008069103王五21表table_astudentidspecialtylevel08069101ComputerC-Three08069102EnglishE-Six08069105MathsNull表table_bstudentidnameagespecialtylevel08069101張三21ComputerC-Three08069102李四20EnglishE-Six08069105NullNullMathsNull08069103王五21NullNull例:Table_a和table_b進(jìn)行完整外部連接。SELECTTable_a.studentid,Table_,Table_a.age,Table_b.specialty,Table_b.levelFROMTable_aFULLOUTERJOINTable_bON

Table_a.studentid

=Table_b.studentidstudentidnameagespecialtylevel08069101張三21ComputerC-Three08069102李四20EnglishE-Six08069105NullNullMathsNull08069103王五21NullNull例6-18:顯示所有玩具的名稱和購(gòu)物車代碼。如果玩具不在購(gòu)物車上,則應(yīng)顯示NULL。SELECTToys.vToyName,ShoppingCart.cCartIdFROMToysLEFTOUTERJOIN

ShoppingCartONToys.cToyId=ShoppingCart.cToyId結(jié)果如下:vToyNamecCartId-----------------------------------RobbytheWhale000001RobbytheWhale000005WaterChannelSystemNULLParachuteandRocketNULLSuperDeluge000004LightShowLampNULLGlassDecoration000007………………6.12合并查詢結(jié)果集語(yǔ)法如下:SELECT列名[,列名…]FROM表名1UNION[ALL]SELECT列名[,列名…]FROM表名2

注意:結(jié)果集的列標(biāo)題是第一個(gè)SELECT語(yǔ)句的列標(biāo)題,后續(xù)的SELECT語(yǔ)句中的所有列必須具有同第一個(gè)SELECT語(yǔ)句中的列相似的數(shù)據(jù)類型,而且列數(shù)也必須相似。缺省情況下,UNION子句將移去重復(fù)行。如果使用了ALL,這些重復(fù)行也將顯示。例6-19:顯示購(gòu)物者和接收者的名字、姓、地址和城市。SELECTvFirstName,vLastName,vAddress,cCityFROMShopperUNIONSELECTvFirstName,vLastName,vAddress,cCityFROMRecipient結(jié)果如下:vFirstNamevLastNamevAddresscCity-------------------------------------------------------AngelaSmith16223RadianceCourtWoodbridgeBarbaraJohnson227BeachAve.SunnyvaleBettyWilliams1TreadRoadVirginiaBeach………………6.13子查詢一個(gè)嵌套于其他查詢之中的查詢稱為子查詢。在一個(gè)SELECT語(yǔ)句的WHERE子句或HAVING子句中嵌套另一個(gè)SELECT語(yǔ)句的查詢稱為嵌套查詢,又稱子查詢。SELECT<目標(biāo)表達(dá)式1>[,...]FROM<表或視圖名1>WHERE[表達(dá)式](SELECT<目標(biāo)表達(dá)式2>[,...]FROM<表或視圖名2>)

子查詢有多種多樣,最常見(jiàn)的有下面四種。使用比較運(yùn)算符連接子查詢使用謂詞IN連接子查詢使用謂詞EXISTS連接子查詢

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論