




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
模塊6用SQL語(yǔ)句查詢MySQL數(shù)據(jù)表課程名稱MySQL數(shù)據(jù)庫(kù)應(yīng)用、設(shè)計(jì)與管理任務(wù)驅(qū)動(dòng)教程章名用SQL語(yǔ)句查詢MySQL數(shù)據(jù)表教學(xué)內(nèi)容用SQL語(yǔ)句查詢MySQL數(shù)據(jù)表課時(shí)4項(xiàng)目性質(zhì)□演性 驗(yàn)性 □計(jì)性 √合性授課班級(jí)授課日期授課地點(diǎn)教學(xué)目標(biāo)掌握創(chuàng)建單表基本查詢的方法掌握創(chuàng)建多表連接查詢的方法掌握創(chuàng)建嵌套查詢和子查詢的方法教學(xué)內(nèi)容創(chuàng)建單表基本查詢創(chuàng)建多表連接查詢創(chuàng)建嵌套查詢和子查詢教學(xué)重點(diǎn)查詢MySQL數(shù)據(jù)表教學(xué)難點(diǎn)查詢MySQL數(shù)據(jù)表教學(xué)準(zhǔn)備裝有MySQL、NavicatforMySQL等軟件的計(jì)算機(jī)教學(xué)課件PPT教材:《MySQL數(shù)據(jù)庫(kù)應(yīng)用、設(shè)計(jì)與管理任務(wù)驅(qū)動(dòng)教程(微課版)》作業(yè)設(shè)計(jì)教學(xué)過(guò)程教學(xué)環(huán)節(jié)教學(xué)內(nèi)容與過(guò)程(教學(xué)內(nèi)容、教學(xué)方法、組織形式、教學(xué)手段)課前組織做好上課前的各項(xiàng)準(zhǔn)備工作(打開(kāi)計(jì)算機(jī)、打開(kāi)課件、打開(kāi)軟件、打開(kāi)授課計(jì)劃、教案等),吸引學(xué)生注意力。課程說(shuō)明【課前說(shuō)明】從Select語(yǔ)句引入本模塊學(xué)習(xí)內(nèi)容?!灸康摹渴箤W(xué)生從了解本節(jié)課的學(xué)習(xí)目標(biāo)、學(xué)習(xí)重點(diǎn)、考評(píng)方式等方面明確課程學(xué)習(xí)的要求和目標(biāo)。課程內(nèi)容描述6.1創(chuàng)建單表基本查詢1.Select語(yǔ)句的語(yǔ)法格式及其功能(1)Select語(yǔ)句的一般格式。MySQL從數(shù)據(jù)表中查詢數(shù)據(jù)的基本語(yǔ)句為Select語(yǔ)句,Select語(yǔ)句的一般格式如下:Select<字段名稱或表達(dá)式列表>From<數(shù)據(jù)表名稱或視圖名稱>[Where<條件表達(dá)式>][GroupBy<分組的字段名稱或表達(dá)式>][Having<篩選條件>][OrderBy<排序的字段名稱或表達(dá)式>Asc|Desc][數(shù)據(jù)表的別名](2)Select語(yǔ)句的功能。根據(jù)Where子句的條件表達(dá)式,從From子句指定的數(shù)據(jù)表中找出滿足條件的記錄,再按Select子句選出記錄中的字段值,把查詢結(jié)果以表格的形式返回。(3)Select語(yǔ)句的說(shuō)明。Select關(guān)鍵字后面跟隨的是要檢索的字段列表,并且指定了字段的順序。SQL查詢子句順序?yàn)镾elect、Into、From、Where、GroupBy、Having和OrderBy等。其中Select子句和From子句是必須的,其余的子句均可省略,而Having子句只能和GroupBy子句搭配起來(lái)使用。From子句返回初始結(jié)果集,Where子句排除不滿足搜索條件的記錄,GroupBy子句對(duì)選定的記錄進(jìn)行分組,Having子句排除不滿足分組聚合后搜索條件的記錄。①Select關(guān)鍵字后面的字段名稱或表達(dá)式列表表示需要查詢的字段名稱或表達(dá)式。②From子句是Select語(yǔ)句所必需的子句,用于標(biāo)識(shí)從中檢索數(shù)據(jù)的一張或多張數(shù)據(jù)表或視圖。③Where子句用于設(shè)定查詢條件以返回需要的記錄,如果有Where子句,就按照對(duì)應(yīng)的“條件表達(dá)式”規(guī)定的條件進(jìn)行查詢。如果沒(méi)有Where子句,就查詢所有記錄。④GroupBy子句用于將查詢結(jié)果按指定的一個(gè)字段或多個(gè)字段的值進(jìn)行分組統(tǒng)計(jì),分組字段或表達(dá)式的值相等的被分為同一組。通常GroupBy子句與Count()、Sum()等聚合函數(shù)配合使用。⑤Having子句與GroupBy子句配合使用,用于進(jìn)一步對(duì)由GroupBy子句分組的結(jié)果限定篩選條件,滿足該篩選條件的數(shù)據(jù)才能被輸出。⑥OrderBy子句用于將查詢結(jié)果按指定的字段進(jìn)行排序。排序包括升序排列和降序排列。其中Asc表示記錄按升序排列,Desc表示記錄按降序排列,默認(rèn)狀態(tài)下,記錄按升序方式排列。⑦數(shù)據(jù)表的別名用于代替數(shù)據(jù)表的原名稱。2.SQL的語(yǔ)言類型及常用的語(yǔ)句SQL的語(yǔ)言類型及常用的語(yǔ)句如表所示。SQL的語(yǔ)言類型及常用的語(yǔ)句語(yǔ)言類型功能描述常用語(yǔ)句數(shù)據(jù)定義語(yǔ)言(DDL)用于創(chuàng)建、修改和刪除數(shù)據(jù)庫(kù)對(duì)象,這些數(shù)據(jù)庫(kù)對(duì)象主要包括數(shù)據(jù)庫(kù)、數(shù)據(jù)表、視圖、索引、函數(shù)、存儲(chǔ)過(guò)程、觸發(fā)器等Create語(yǔ)句用于創(chuàng)建對(duì)象,Alter語(yǔ)句用于修改對(duì)象,Drop語(yǔ)句用于刪除對(duì)象數(shù)據(jù)操縱語(yǔ)言(DML)用于操縱和管理數(shù)據(jù)表和視圖,包括查詢、插入、更新和刪除數(shù)據(jù)表中的數(shù)據(jù)Select語(yǔ)句用于查詢數(shù)據(jù)表或視圖中的數(shù)據(jù),Insert語(yǔ)句用于向數(shù)據(jù)表或視圖中插入數(shù)據(jù),UpDate語(yǔ)句用于更新數(shù)據(jù)表或視圖中的數(shù)據(jù),Delete語(yǔ)句用于刪除數(shù)據(jù)表或視圖中的數(shù)據(jù)數(shù)據(jù)控制語(yǔ)言(DCL)用于設(shè)置或者更改數(shù)據(jù)庫(kù)用戶的權(quán)限Grant(授予)用于授予用戶某個(gè)權(quán)限,Revoke(撤銷)用于撤銷用戶某個(gè)權(quán)限,Deny用于拒絕給當(dāng)前數(shù)據(jù)庫(kù)中的用戶或角色授予權(quán)限,并防止用戶或角色通過(guò)組或角色成員繼承權(quán)限【任務(wù)6-1】使用Navicat圖形管理工具實(shí)現(xiàn)查詢操作【任務(wù)描述】在NavicatforMySQL圖形化環(huán)境中創(chuàng)建、運(yùn)行查詢,查詢“用戶信息”數(shù)據(jù)表中所有的記錄,要求將該表各個(gè)字段的別名設(shè)置為“用戶ID”“用戶編號(hào)”“用戶名稱”“密碼”。【任務(wù)實(shí)施】(1)啟動(dòng)圖形管理工具NavicatforMySQL,打開(kāi)連接“MallConn”,打開(kāi)數(shù)據(jù)庫(kù)“MallDB”。(2)單擊【NavicatforMySQL】窗口工具欄中的【查詢】按鈕,顯示查詢對(duì)象。(3)單擊【新建查詢】按鈕,顯示【查詢編輯器】選項(xiàng)卡,如圖所示?!静樵兙庉嬈鳌窟x項(xiàng)卡在【查詢編輯器】選項(xiàng)卡的工具欄中單擊【查詢創(chuàng)建工具】按鈕,彈出【查詢創(chuàng)建工具】窗口,該窗口左側(cè)為數(shù)據(jù)庫(kù)中的數(shù)據(jù)表列表,中部上方為數(shù)據(jù)表或視圖顯示區(qū)域,中部下方提供了創(chuàng)建查詢語(yǔ)句的模板,右側(cè)為SQL語(yǔ)句顯示區(qū)域,如圖所示?!静樵儎?chuàng)建工具】窗口(4)選擇創(chuàng)建查詢的數(shù)據(jù)表及其字段。在【查詢創(chuàng)建工具】窗口左側(cè)數(shù)據(jù)表列中雙擊數(shù)據(jù)表“用戶信息”,彈出可供選擇的“用戶信息”數(shù)據(jù)表字段,這里依次選擇“UserID”“UserNumber”“Name”和“UserPassword”,同時(shí)窗口右側(cè)區(qū)域自動(dòng)生成了對(duì)應(yīng)的SQL語(yǔ)句,如圖所示。在【查詢創(chuàng)建工具】窗口中選擇查詢的數(shù)據(jù)表和字段(5)在查詢語(yǔ)句模板區(qū)域設(shè)置別名。“用戶信息”數(shù)據(jù)表的字段名稱為英文名,如果需要設(shè)置中文名,可以在【查詢創(chuàng)建工具】窗口的查詢語(yǔ)句模板區(qū)域單擊“<別名>”,在彈出的文本框中輸入中文別名,然后單擊【確定】按鈕關(guān)閉文本框,這里分別輸入“用戶ID”“用戶編號(hào)”“用戶名稱”和“密碼”。查詢“用戶信息”的SQL語(yǔ)句如下:Select'用戶信息'.UserIDAs'用戶ID','用戶信息'.UserNumberAs'用戶編號(hào)','用戶信息'.'Name'As'用戶名稱','用戶信息'.UserPasswordAs'密碼'From'用戶信息'(6)保存創(chuàng)建的查詢。在【查詢創(chuàng)建工具】窗口中單擊【構(gòu)建】按鈕,關(guān)閉該窗口,返回【查詢編輯器】選項(xiàng)卡。在工具欄中單擊【保存】按鈕,打開(kāi)【查詢名】對(duì)話框,在該對(duì)話框的“查詢名”文本框中輸入“查詢0601”,如圖所示,然后單擊【OK】按鈕保存剛才創(chuàng)建的查詢?!静樵兠繉?duì)話框(7)在【查詢編輯器】選項(xiàng)卡中查看SQL語(yǔ)句。在工具欄中單擊【解釋】按鈕,顯示【解釋1】選項(xiàng)卡,完整的SQL語(yǔ)句與【解釋1】選項(xiàng)卡如圖所示。在【查詢編輯器】選項(xiàng)卡中查看SQL語(yǔ)句(8)運(yùn)行查詢。在工具欄中單擊【運(yùn)行】按鈕,運(yùn)行“查詢0601”,運(yùn)行結(jié)果如圖所示?!安樵?601”的運(yùn)行結(jié)果【任務(wù)6-2】查詢時(shí)選擇與設(shè)置字段Select語(yǔ)句使用通配符“*”選擇數(shù)據(jù)表中所有的字段,使用All關(guān)鍵字選擇所有記錄,All一般省略不寫(xiě)。Select關(guān)鍵字與第一個(gè)字段名稱之間使用半角空格分隔,可以使用多個(gè)半角空格,其效果等效于一個(gè)半角空格。SQL語(yǔ)句中各部分之間必須使用空格分隔,SQL語(yǔ)句中的空格必須是半角空格,如果輸入全角空格,則會(huì)出現(xiàn)錯(cuò)誤提示信息。Select語(yǔ)句中,在Select關(guān)鍵字后面指定要查詢的字段名稱,字段列表中不同字段名稱之間使用半角逗號(hào)“,”分隔開(kāi),最后一個(gè)字段后面不能加半角逗號(hào)。語(yǔ)法格式如下:Select字段名稱1,字段名稱2,…,字段名稱nFrom數(shù)據(jù)表名稱;使用Select語(yǔ)句查詢時(shí),返回結(jié)果中的列標(biāo)題與數(shù)據(jù)表或視圖中的字段名稱相同。查詢時(shí)可以使用As關(guān)鍵字來(lái)為查詢中的字段或表達(dá)式指定標(biāo)題名稱,這些名稱既可以用來(lái)改善查詢輸出的外觀,也可以用來(lái)為一般情況下沒(méi)有標(biāo)題名稱的表達(dá)式分配名稱(該名稱稱為別名)。使用As為字段或表達(dá)式分配標(biāo)題名稱時(shí),只改變輸出結(jié)果中的列標(biāo)題的名稱,對(duì)該列顯示的內(nèi)容沒(méi)有影響。具體語(yǔ)法格式如下:Select字段名稱1As別名1,字段名稱2As別名2,…,字段名稱nAs別名nFrom數(shù)據(jù)表名稱;其中字段名稱為數(shù)據(jù)表中字段真實(shí)的名稱,別名為輸出結(jié)果的列標(biāo)題名稱,As為可選項(xiàng),省略As時(shí)顯示結(jié)果相同。使用As為字段和表達(dá)式分配的標(biāo)題名稱相當(dāng)于實(shí)際的列名,是可以再被其他的SQL語(yǔ)句使用的。在查詢中經(jīng)常需要對(duì)查詢結(jié)果數(shù)據(jù)進(jìn)行再次計(jì)算處理,在MySQL中允許直接在Select子句中對(duì)列進(jìn)行計(jì)算。運(yùn)算符主要包括+(加)、-(減)、×(乘)、/(除)等。計(jì)算列并不存在于數(shù)據(jù)表中,它是通過(guò)對(duì)某些列的數(shù)據(jù)進(jìn)行計(jì)算得到的。Select語(yǔ)句中Select關(guān)鍵字后面可以使用表達(dá)式作為檢索對(duì)象,表達(dá)式可以出現(xiàn)在檢索的字段列表的任何位置。如果表達(dá)式是數(shù)學(xué)表達(dá)式,則顯示的結(jié)果是數(shù)學(xué)表達(dá)式的計(jì)算結(jié)果。例如要求計(jì)算每一種商品的總金額,可以使用表達(dá)式“價(jià)格*數(shù)量”計(jì)算,并且使用“金額”作為輸出結(jié)果的列標(biāo)題。如果沒(méi)有為計(jì)算列指定列名,則返回的結(jié)果是看不到列標(biāo)題的。【任務(wù)6-2-1】查詢所有字段【任務(wù)描述】查詢“用戶類型”數(shù)據(jù)表中所有的字段?!救蝿?wù)實(shí)施】首先打開(kāi)Windows操作系統(tǒng)下的【命令提示符】窗口,登錄MySQL數(shù)據(jù)庫(kù)服務(wù)器,然后使用“UseMallDB;”語(yǔ)句選擇數(shù)據(jù)庫(kù)“MallDB”。查詢對(duì)應(yīng)的SQL語(yǔ)句如下:Select*From用戶類型;查詢的運(yùn)行結(jié)果如圖所示?!救蝿?wù)6-2-1】查詢的運(yùn)行結(jié)果明確指定字段名稱的查詢SQL語(yǔ)句如下:Select用戶類型ID,用戶類型名稱,用戶類型說(shuō)明From用戶類型;查詢的運(yùn)行結(jié)果如上圖所示?!救蝿?wù)6-2-2】查詢指定字段在Select子句后面輸入相應(yīng)的字段名稱,就可以把指定的字段值從數(shù)據(jù)表中檢索出來(lái)。當(dāng)目標(biāo)字段不止一個(gè)時(shí),使用半角逗號(hào)“,”隔開(kāi)。【任務(wù)描述】查詢“用戶注冊(cè)信息”數(shù)據(jù)表中所有的記錄,查詢結(jié)果只包含“用戶編號(hào)”“用戶名稱”和“密碼”3列數(shù)據(jù)?!救蝿?wù)實(shí)施】查詢對(duì)應(yīng)的SQL語(yǔ)句如下:Select用戶編號(hào),用戶名稱,密碼From用戶注冊(cè)信息;查詢的運(yùn)行結(jié)果如圖所示?!救蝿?wù)6-2-2】查詢的運(yùn)行結(jié)果【任務(wù)6-2-3】查詢經(jīng)過(guò)計(jì)算后的字段【任務(wù)描述】從“訂購(gòu)商品”數(shù)據(jù)表中查詢訂單商品應(yīng)付金額,查詢結(jié)果包含“訂單編號(hào)”“商品編號(hào)”“購(gòu)買數(shù)量”“優(yōu)惠價(jià)格”“優(yōu)惠金額”和“應(yīng)付金額”。其中“應(yīng)付金額”為計(jì)算字段,計(jì)算公式為“購(gòu)買數(shù)量*優(yōu)惠價(jià)格-優(yōu)惠金額”。【任務(wù)實(shí)施】查詢對(duì)應(yīng)的SQL語(yǔ)句如下:Select訂單編號(hào),商品編號(hào),購(gòu)買數(shù)量,優(yōu)惠價(jià)格,優(yōu)惠金額,購(gòu)買數(shù)量*優(yōu)惠價(jià)格-優(yōu)惠金額As應(yīng)付金額From訂購(gòu)商品;查詢的運(yùn)行結(jié)果如圖所示。【任務(wù)6-2-3】查詢的運(yùn)行結(jié)果【任務(wù)6-2-4】查詢時(shí)為查詢結(jié)果指定別名【任務(wù)描述】查詢“用戶信息”數(shù)據(jù)表中全部用戶數(shù)據(jù),查詢結(jié)果只包含“UserNumber”“Name”和“UserPassword”3列數(shù)據(jù),要求這3個(gè)字段輸出時(shí)分別以“用戶編號(hào)”“用戶名稱”和“密碼”作為標(biāo)題。【任務(wù)實(shí)施】查詢對(duì)應(yīng)的SQL語(yǔ)句如下:SelectUserNumberAs用戶編號(hào),NameAs用戶名稱,UserPasswordAs密碼From用戶信息;查詢的運(yùn)行結(jié)果如圖所示。【任務(wù)6-2-4】查詢的運(yùn)行結(jié)果對(duì)應(yīng)的SQL語(yǔ)句中的As可以省略,即可以寫(xiě)成以下形式:SelectUserNumber用戶編號(hào),Name用戶名稱,UserPassword密碼From用戶信息;該語(yǔ)句查詢的運(yùn)行結(jié)果如上圖所示?!救蝿?wù)6-3】查詢時(shí)選擇行Where子句后面是一個(gè)邏輯表達(dá)式表示的條件,用來(lái)限制Select語(yǔ)句檢索的記錄,即查詢結(jié)果中的記錄都應(yīng)該是滿足該條件的記錄。使用Where子句并不會(huì)影響所要檢索的字段,Select語(yǔ)句要檢索的字段由Select關(guān)鍵字后面的字段列表決定。數(shù)據(jù)表中所有的字段都可以出現(xiàn)在Where子句的表達(dá)式中,不管它是否出現(xiàn)在要檢索的字段列表中。Where子句后面的邏輯表達(dá)式中可以使用以下運(yùn)算符。(1)比較運(yùn)算符。SQL語(yǔ)句中的比較運(yùn)算符如表所示。比較運(yùn)算符序號(hào)運(yùn)算符說(shuō)明1=等于2<>不等于3!=不等于4<小于5!<不小于6>大于7!>不大于8<=小于或等于9>=大于或等于比較運(yùn)算符“=”就是比較兩個(gè)值是否相等,若相等,則表達(dá)式的計(jì)算結(jié)果為“邏輯真”。當(dāng)比較運(yùn)算符連接的數(shù)據(jù)類型不是數(shù)字時(shí),要用半角單引號(hào)把比較運(yùn)算符后面的數(shù)據(jù)引起來(lái),并且運(yùn)算符兩邊表達(dá)式的數(shù)據(jù)類型必須保持一致。(2)邏輯運(yùn)算符(And或&&、Or或||、Not或!、Xor)。邏輯與(And)表示多個(gè)條件同時(shí)為真時(shí)才返回結(jié)果,邏輯或(Or)表示多個(gè)條件中有一個(gè)條件為真就返回結(jié)果,邏輯非(Not)表示當(dāng)表達(dá)式不成立時(shí)才返回結(jié)果。And運(yùn)算符的語(yǔ)法格式如下:條件表達(dá)式1And條件表達(dá)式2[And條件表達(dá)式n]Or運(yùn)算符的語(yǔ)法格式如下:條件表達(dá)式1Or條件表達(dá)式2[Or條件表達(dá)式n]Not運(yùn)算符的語(yǔ)法格式如下:Not條件表達(dá)式Or運(yùn)算符也可以與And運(yùn)算符一起使用,當(dāng)兩者一起使用時(shí),And的優(yōu)先級(jí)要比Or高。(3)模糊匹配運(yùn)算符(Like、NotLike)。在Where子句中,使用模糊匹配運(yùn)算符Like或NotLike可以把表達(dá)式與字符串進(jìn)行比較,從而實(shí)現(xiàn)模糊查詢。所謂模糊查詢,就是查找數(shù)據(jù)表中與用戶輸入關(guān)鍵字相近或相似的記錄信息。模糊匹配運(yùn)算符通常與通配符一起使用,使用通配符時(shí)必須將字符串和通配符都用半角單引號(hào)引起來(lái)。模糊匹配運(yùn)算符的使用語(yǔ)法格式如下:[Not]Like'帶通配符的字符串'字符串必須加上半角單引號(hào)或雙引號(hào),字符串中可以包含“%”“_”通配符。MySQL提供了表所示的模糊匹配的通配符。模糊匹配的通配符通配符含義示例%表示0~n個(gè)任意字符'XY%':匹配以XY開(kāi)始的任意字符串。'%X':匹配以X結(jié)束的任意字符串。'X%Y':匹配包含XY的任意字符串_表示單個(gè)任意字符'_X':匹配以X結(jié)束的兩個(gè)字符的字符串。'X_Y':匹配以字母X開(kāi)頭,字母Y結(jié)尾的3個(gè)字符組成字符串(4)范圍運(yùn)算符(BetweenAnd、NotBetweenAnd、In、NotIn)。Where子句中可以使用范圍運(yùn)算符指定查詢范圍,當(dāng)要查詢的條件是某個(gè)值的范圍時(shí),可以使用BetweenAnd關(guān)鍵字。該運(yùn)算符需要兩個(gè)參數(shù),即范圍的起始值和終止值,如果記錄的字段值滿足指定的范圍查詢條件時(shí),則這些記錄被返回。BetweenAnd關(guān)鍵字前可以加關(guān)鍵字Not,表示取指定范圍之外的值,如果字段值不滿足指定范圍內(nèi)的值,則這些記錄被返回。在Where子句中,使用In關(guān)鍵字可以方便地限制檢查數(shù)據(jù)的范圍。靈活使用In關(guān)鍵字,可以使用簡(jiǎn)潔的語(yǔ)句實(shí)現(xiàn)結(jié)構(gòu)復(fù)雜的查詢。使用In關(guān)鍵字可以確定表達(dá)式的取值是否屬于某一值列表,當(dāng)表達(dá)式取值與值列表中的任一個(gè)數(shù)據(jù)匹配時(shí),即返回True,否則返回False。同樣,如果查詢表達(dá)式不屬于某一值列表,可使用NotIn關(guān)鍵字。(5)空值比較運(yùn)算符(IsNull、IsNotNull)。數(shù)據(jù)表創(chuàng)建時(shí),可以指定某字段是否可以包含空值(Null),空值不同于0,也不同于空字符串,空值一般表示數(shù)據(jù)未知、不適用或?qū)⒃谝院笤偬砑印T赟elect語(yǔ)句中使用IsNull子句可以查詢某字段值為空的記錄,使用IsNotNull子句可以查詢字段值不為空的記錄。(6)子查詢比較運(yùn)算符(All、Any、Some)。Where子句后面的邏輯表達(dá)式中可以包含數(shù)字、貨幣、字符/字符串、日期/時(shí)間等類型的字段和常量。日期/時(shí)間類型的常量必須使用半角單引號(hào)('')作為標(biāo)記,例如'1/1/2021',字符/字符串類型的常量(即字符串)也必須使用半角單引號(hào)('')作為標(biāo)記,例如'人民郵電出版社'。【任務(wù)6-3-1】在Where子句中使用比較查詢條件篩選記錄【任務(wù)描述】(1)從“圖書(shū)信息”數(shù)據(jù)表中檢索作者為“陳承歡”的圖書(shū)信息。(2)從“圖書(shū)信息”數(shù)據(jù)表中檢索2020年之后出版的圖書(shū)信息。以上兩項(xiàng)查詢的結(jié)果只需包含“商品編號(hào)”“圖書(shū)名稱”“作者”“出版日期”4個(gè)字段。【任務(wù)實(shí)施】(1)從“圖書(shū)信息”數(shù)據(jù)表中檢索作者為“陳承歡”的圖書(shū)信息對(duì)應(yīng)的SQL查詢語(yǔ)句如下:Select商品編號(hào),圖書(shū)名稱,作者,出版日期From圖書(shū)信息Where作者='陳承歡';(2)從“圖書(shū)信息”數(shù)據(jù)表中檢索2020年之后出版的圖書(shū)信息對(duì)應(yīng)的SQL查詢語(yǔ)句如下:Select商品編號(hào),圖書(shū)名稱,作者,出版日期From圖書(shū)信息WhereYear(出版日期)>2020;查詢語(yǔ)句中的函數(shù)Year()返回指定日期的“年”部分的整數(shù)?!救蝿?wù)6-3-2】查詢時(shí)去除重復(fù)項(xiàng)由于“商品信息”數(shù)據(jù)表中“商品類型”字段包含了大量的重復(fù)值,一種商品類型包含了多種商品,因此為了剔除查詢結(jié)果中的重復(fù)項(xiàng),值相同的記錄只返回其中的第一條記錄,可以使用Distinct關(guān)鍵字實(shí)現(xiàn)本查詢要求。使用Distinct關(guān)鍵字時(shí),如果數(shù)據(jù)表中存在多條值為Null的記錄,那這些記錄將作為重復(fù)值處理。【任務(wù)描述】從“商品信息”數(shù)據(jù)表中檢索所有商品的商品類型,并去除重復(fù)項(xiàng)?!救蝿?wù)實(shí)施】查詢時(shí)去除重復(fù)項(xiàng)對(duì)應(yīng)的SQL語(yǔ)句如下:SelectDistinct商品類型From商品信息;查詢的運(yùn)行結(jié)果如圖所示?!救蝿?wù)6-3-2】查詢的運(yùn)行結(jié)果由于“商品信息”數(shù)據(jù)表中只有4種不同類型的商品,所以該查詢語(yǔ)句只返回4條記錄。【任務(wù)6-3-3】使用Limit關(guān)鍵字查詢限定數(shù)量的記錄查詢數(shù)據(jù)時(shí),可能會(huì)查詢出很多的記錄,而用戶需要的記錄可能只是很少的一部分,這時(shí)就需要限制查詢結(jié)果的數(shù)量。Limit是MySQL中的一個(gè)特殊關(guān)鍵字,通常放在Select語(yǔ)句后面,用來(lái)指定查詢結(jié)果從哪一條記錄開(kāi)始顯示,一共顯示多少條記錄。Limit關(guān)鍵字有兩種使用方式。(1)不指定初始位置。Limit關(guān)鍵字不指定初始位置時(shí),記錄從第1條開(kāi)始顯示,顯示記錄的數(shù)量由Limit關(guān)鍵字指定,語(yǔ)法格式如下:Limit<記錄數(shù)量>其中,“記錄數(shù)量”參數(shù)表示顯示記錄的數(shù)量。如果指定的“記錄數(shù)量”的值小于數(shù)據(jù)表的總記錄數(shù),將會(huì)從第1條記錄開(kāi)始顯示指定數(shù)量的記錄。如果指定的“記錄數(shù)量”的值大于數(shù)據(jù)表的總記錄數(shù),則會(huì)直接顯示數(shù)據(jù)表中的所有記錄。(2)指定初始位置。Limit關(guān)鍵字可以指定從哪一條記錄開(kāi)始顯示,并且還可以指定一共顯示多少條記錄,語(yǔ)法格式如下:Limit<初始位置>,<記錄數(shù)量>其中,“初始位置”參數(shù)指定從哪一條記錄開(kāi)始顯示,“記錄數(shù)量”參數(shù)表示顯示記錄的數(shù)量?!俺跏嘉恢谩睘?表示從第1條記錄開(kāi)始,“初始位置”為1表示從第2條記錄開(kāi)始,后面記錄的順序號(hào)依次類推?!癓imit0,2”與“Limit2”的含義是等價(jià)的,都是顯示前兩條記錄。【任務(wù)描述】(1)從“圖書(shū)信息”數(shù)據(jù)表中檢索前5種圖書(shū)的數(shù)據(jù)。(2)從“圖書(shū)信息”數(shù)據(jù)表中檢索前第2種至第4種圖書(shū)的數(shù)據(jù)。以上兩項(xiàng)查詢的結(jié)果只需包含“商品編號(hào)”“圖書(shū)名稱”兩個(gè)字段?!救蝿?wù)實(shí)施】(1)從“圖書(shū)信息”數(shù)據(jù)表中檢索前5種圖書(shū)的數(shù)據(jù)對(duì)應(yīng)的SQL語(yǔ)句如下:Select商品編號(hào),圖書(shū)名稱From圖書(shū)信息Limit5;查詢的運(yùn)行結(jié)果如圖所示。查詢“圖書(shū)信息”數(shù)據(jù)表中前5種圖書(shū)的數(shù)據(jù)的運(yùn)行結(jié)果(2)從“圖書(shū)信息”數(shù)據(jù)表中檢索前第2種至第4種圖書(shū)的數(shù)據(jù)對(duì)應(yīng)的SQL語(yǔ)句如下:Select商品編號(hào),圖書(shū)名稱From圖書(shū)信息Limit1,3;查詢的運(yùn)行結(jié)果如圖所示。查詢“圖書(shū)信息”數(shù)據(jù)表中第2種至第4種圖書(shū)的數(shù)據(jù)的運(yùn)行結(jié)果由于記錄的初始位置“0”表示第1條記錄,所以第2種圖書(shū)的位置序號(hào)為“1”。【任務(wù)6-3-4】使用BetweenAnd創(chuàng)建范圍查詢【任務(wù)描述】從“圖書(shū)信息”數(shù)據(jù)表中檢索出版日期在“2019-10-01”和“2021-05-01”之間的圖書(shū)信息,查詢結(jié)果只需包含“商品編號(hào)”“圖書(shū)名稱”和“出版日期”3個(gè)字段?!救蝿?wù)實(shí)施】使用BetweenAnd創(chuàng)建范圍查詢對(duì)應(yīng)的SQL語(yǔ)句如下:Select商品編號(hào),圖書(shū)名稱,出版日期From圖書(shū)信息Where出版日期Between'2019-10-01'And'2021-05-01';查詢條件中的表達(dá)式“出版日期Between'2019-10-01'And'2021-05-01'”也可以用表達(dá)式“出版日期>='2019-10-01'And出版日期<='2021-05-01'”代替。使用日期作為范圍條件時(shí),應(yīng)用使用半角單引號(hào)引起來(lái),使用的日期格式一般是“年-月-日”。查詢的運(yùn)行結(jié)果如圖所示?!救蝿?wù)6-3-4】查詢的運(yùn)行結(jié)果【任務(wù)6-3-5】使用In關(guān)鍵字創(chuàng)建查詢【任務(wù)描述】從“圖書(shū)信息”數(shù)據(jù)表中檢索出“陳承歡”“王振世”和“王斌會(huì)”3位作者編寫(xiě)的圖書(shū)信息,查詢結(jié)果要求包含“商品編號(hào)”“圖書(shū)名稱”和“作者”3個(gè)字段。【任務(wù)實(shí)施】使用In關(guān)鍵字查詢對(duì)應(yīng)的SQL語(yǔ)句如下:Select商品編號(hào),圖書(shū)名稱,作者From圖書(shū)信息Where作者In('陳承歡','王振世','王斌會(huì)');查詢條件中的表達(dá)式“作者In('陳承歡','王振世','王斌會(huì)')”也可以用表達(dá)式“(作者='陳承歡')Or(作者='王振世')Or(作者='王斌會(huì)')”代替,但使用In關(guān)鍵字時(shí)表達(dá)式簡(jiǎn)單且可讀性更高。在Where子句中使用In關(guān)鍵字時(shí),如果值列表有多個(gè),則使用半角逗號(hào)分隔,并且值列表中不允許出現(xiàn)Null?!救蝿?wù)6-3-6】使用Like創(chuàng)建模糊查詢【任務(wù)描述】(1)從“圖書(shū)信息”數(shù)據(jù)表中檢索出作者姓“鄭”的圖書(shū)信息。(2)從“圖書(shū)信息”數(shù)據(jù)表中檢索出作者不姓“陳”的圖書(shū)信息。(3)從“圖書(shū)信息”數(shù)據(jù)表中檢索出作者姓名只有3個(gè)漢字并且姓“王”的圖書(shū)信息。查詢結(jié)果要求只需包含“商品編號(hào)”“圖書(shū)名稱”和“作者”3個(gè)字段。【任務(wù)實(shí)施】(1)從“圖書(shū)信息”數(shù)據(jù)表中的檢索作業(yè)姓“鄭”的圖書(shū)信息對(duì)應(yīng)的SQL查詢語(yǔ)句如下:Select商品編號(hào),圖書(shū)名稱,作者From圖書(shū)信息Where作者Like'鄭%';該查詢語(yǔ)句的查詢條件表示匹配“作者”字段第1個(gè)字符是“鄭”,長(zhǎng)度為任意個(gè)字符。(2)從“圖書(shū)信息”數(shù)據(jù)表中檢索作者不姓“陳”的圖書(shū)信息對(duì)應(yīng)的SQL查詢語(yǔ)句如下:Select商品編號(hào),圖書(shū)名稱,作者From圖書(shū)信息Where作者NotLike'陳%';該查詢語(yǔ)句的查詢條件表示匹配“作者”字段第1個(gè)字符不是“陳”,長(zhǎng)度為任意個(gè)字符。(3)從“圖書(shū)信息”數(shù)據(jù)表中檢索作者姓名只有3個(gè)漢字且姓“王”的圖書(shū)信息對(duì)應(yīng)的SQL查詢語(yǔ)句如下:Select商品編號(hào),圖書(shū)名稱,作者From圖書(shū)信息Where作者Like'王__';作者姓名為3個(gè)漢字,使用3個(gè)“_”通配符。由于要求查詢結(jié)果包含姓“王”的作者,所以第1個(gè)字符使用漢字“王”,后面只需要兩個(gè)“_”通配符即可?!救蝿?wù)6-3-7】創(chuàng)建搜索空值的查詢【任務(wù)描述】從“圖書(shū)信息”數(shù)據(jù)表中檢索“版次”不為空的圖書(shū)信息,查詢結(jié)果只包括“商品編號(hào)”“圖書(shū)名稱”和“版次”3個(gè)字段。【任務(wù)實(shí)施】在Where子句中使用IsNull條件可以查詢數(shù)據(jù)表中值為Null的數(shù)據(jù),使用IsNotNull可以查詢數(shù)據(jù)表中值不為Null的數(shù)據(jù)。查詢數(shù)據(jù)表“圖書(shū)信息”中“版次”不為空的圖書(shū)信息對(duì)應(yīng)的SQL語(yǔ)句如下:Select商品編號(hào),圖書(shū)名稱,版次From圖書(shū)信息Where版次IsNotNull;【任務(wù)6-3-8】使用聚合函數(shù)查詢聚合函數(shù)用于對(duì)一組數(shù)據(jù)值進(jìn)行計(jì)算并返回單一值,所以也被稱為組合函數(shù)。Select子句中可以使用聚合函數(shù)進(jìn)行計(jì)算,計(jì)算結(jié)果作為新列出現(xiàn)在查詢結(jié)果集中。聚合運(yùn)算的表達(dá)式可以包括字段名稱、常量以及由運(yùn)算符連接起來(lái)的函數(shù)。常用的聚合函數(shù)如表所示。常用的聚合函數(shù)函數(shù)名功能函數(shù)名功能Count(*)統(tǒng)計(jì)數(shù)據(jù)表中的總記錄數(shù),包含字段值為空值的記錄Count(字段名稱)統(tǒng)計(jì)指定字段的記錄數(shù),忽略字段值為空值的記錄Avg(字段名稱)計(jì)算指定字段值的平均值Sum(字段名稱)計(jì)算指定字段值的總和Max(字段名稱)計(jì)算指定字段的最大值Min(字段名稱)計(jì)算指定字段的最小值在使用聚合函數(shù)時(shí),可以使用Distinct關(guān)鍵字,以保證計(jì)算時(shí)不包含重復(fù)的行?!救蝿?wù)描述】(1)從“圖書(shū)信息”數(shù)據(jù)表中查詢價(jià)格在“20元”至“45元”之間的圖書(shū)種數(shù)。(2)從“訂購(gòu)商品”數(shù)據(jù)表中查詢商品的種類數(shù)量。(3)從“圖書(shū)信息”數(shù)據(jù)表中查詢圖書(shū)的最高價(jià)、最低價(jià)和平均價(jià)格。(4)從“訂購(gòu)商品”數(shù)據(jù)表中查詢商品的總購(gòu)買數(shù)量?!救蝿?wù)實(shí)施】(1)查詢“圖書(shū)信息”數(shù)據(jù)表中價(jià)格在“20元”至“45元”之間的圖書(shū)種數(shù)對(duì)應(yīng)的SQL語(yǔ)句如下:SelectCount(*)As圖書(shū)種數(shù)From圖書(shū)信息Where價(jià)格Between20And45;查詢語(yǔ)句中使用Count(*)統(tǒng)計(jì)數(shù)據(jù)表中符合條件的記錄數(shù)。查詢的運(yùn)行結(jié)果如圖所示。從“圖書(shū)信息”數(shù)據(jù)表中查詢價(jià)格在“20元”至“45元”之間的圖書(shū)種數(shù)的運(yùn)行結(jié)果(2)查詢“訂購(gòu)商品”數(shù)據(jù)表中商品種類的數(shù)量對(duì)應(yīng)的SQL語(yǔ)句如下:SelectCount(Distinct(商品編號(hào)))As商品種類From訂購(gòu)商品;查詢語(yǔ)句中利用函數(shù)Count()計(jì)算數(shù)據(jù)表特定字段中值的數(shù)量,還利用Distinct關(guān)鍵字控制計(jì)算結(jié)果不包含重復(fù)的行。查詢的運(yùn)行結(jié)果如圖所示。從“訂購(gòu)商品”數(shù)據(jù)表中查詢無(wú)重復(fù)的商品種類的數(shù)量的運(yùn)行結(jié)果(3)查詢“圖書(shū)信息”數(shù)據(jù)表中圖書(shū)的最高價(jià)、最低價(jià)和平均價(jià)格對(duì)應(yīng)的SQL語(yǔ)句如下:SelectMax(價(jià)格)As最高價(jià)格,Min(價(jià)格)As最低價(jià)格,Avg(價(jià)格)As平均價(jià)格From圖書(shū)信息;查詢語(yǔ)句中利用Max()函數(shù)計(jì)算最高價(jià),利用Min()函數(shù)計(jì)算最低價(jià),利用Avg()函數(shù)計(jì)算平均價(jià)格。查詢的運(yùn)行結(jié)果如圖所示。從“圖書(shū)信息”數(shù)據(jù)表中查詢圖書(shū)的最高價(jià)、最低價(jià)和平均價(jià)格的運(yùn)行結(jié)果(4)查詢“訂購(gòu)商品”數(shù)據(jù)表中商品的總購(gòu)買數(shù)量對(duì)應(yīng)的SQL語(yǔ)句如下:SelectSum(購(gòu)買數(shù)量)As總購(gòu)買數(shù)量From訂購(gòu)商品;查詢語(yǔ)句利用函數(shù)Sum(購(gòu)買數(shù)量)計(jì)算總購(gòu)買數(shù)量。查詢的運(yùn)行結(jié)果如圖所示。從“訂購(gòu)商品”數(shù)據(jù)表中查詢商品的總購(gòu)買數(shù)量的運(yùn)行結(jié)果【任務(wù)6-3-9】使用And創(chuàng)建多條件查詢【任務(wù)描述】從“圖書(shū)信息”數(shù)據(jù)表中檢索作者為“陳承歡”,并且出版日期在“2020”年之后的圖書(shū)信息,查詢結(jié)果只需包含“商品編號(hào)”“圖書(shū)名稱”“作者”和“出版日期”4個(gè)字段。【任務(wù)實(shí)施】使用And創(chuàng)建多條件查詢對(duì)應(yīng)的SQL語(yǔ)句如下:Select商品編號(hào),圖書(shū)名稱,作者,出版日期From圖書(shū)信息Where作者='陳承歡'AndYear(出版日期)>2020;該查詢語(yǔ)句必須在兩個(gè)簡(jiǎn)單查詢條件同時(shí)成立時(shí)才返回結(jié)果。【任務(wù)6-3-10】使用Or創(chuàng)建多條件查詢【任務(wù)描述】從“圖書(shū)信息”數(shù)據(jù)表中檢索作者為“陳承歡”或者出版日期在“2020-5-01”之后的圖書(shū)信息,查詢結(jié)果只需包含“商品編號(hào)”“圖書(shū)名稱”“作者”和“出版日期”4個(gè)字段?!救蝿?wù)實(shí)施】使用Or創(chuàng)建多條件查詢對(duì)應(yīng)的SQL語(yǔ)句如下:Select商品編號(hào),圖書(shū)名稱,作者,出版日期From圖書(shū)信息Where作者='陳承歡'Or出版日期>'2020-05-01';該查詢語(yǔ)句的兩個(gè)簡(jiǎn)單查詢條件有一個(gè)成立或者兩個(gè)都成立時(shí)返回結(jié)果?!救蝿?wù)6-3-11】將查詢結(jié)果保存到另一張數(shù)據(jù)表中【任務(wù)描述】對(duì)“訂購(gòu)商品”數(shù)據(jù)表中各個(gè)購(gòu)買出版社圖書(shū)的訂單的購(gòu)買數(shù)量、金額進(jìn)行統(tǒng)計(jì),并將出版社名稱、數(shù)量合計(jì)、金額合計(jì)和圖書(shū)名稱列表等數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)表“圖書(shū)匯總信息”中。【任務(wù)實(shí)施】創(chuàng)建一張數(shù)據(jù)表“圖書(shū)匯總信息”,對(duì)應(yīng)的SQL語(yǔ)句如下:CreateTable圖書(shū)匯總信息(出版社名稱varchar(16),數(shù)量合計(jì)int,金額合計(jì)decimal(10,2),圖書(shū)名稱列表varchar(100));然后向數(shù)據(jù)表“圖書(shū)匯總信息”中插入查詢語(yǔ)句的執(zhí)行結(jié)果,對(duì)應(yīng)的SQL語(yǔ)句如下:InsertInto圖書(shū)匯總信息Select出版社信息.出版社名稱,Sum(訂購(gòu)商品.購(gòu)買數(shù)量),Sum(訂購(gòu)商品.購(gòu)買數(shù)量*訂購(gòu)商品.優(yōu)惠價(jià)格-優(yōu)惠金額),Group_Concat(圖書(shū)信息.圖書(shū)名稱)From訂購(gòu)商品,圖書(shū)信息,出版社信息Where訂購(gòu)商品.商品編號(hào)=圖書(shū)信息.商品編號(hào)And圖書(shū)信息.出版社=出版社信息.出版社IDGroupBy出版社信息.出版社名稱;這里使用InsertInto語(yǔ)句將數(shù)量合計(jì)、金額合計(jì)的統(tǒng)計(jì)結(jié)果和對(duì)應(yīng)的圖書(shū)名稱列表插入數(shù)據(jù)表“圖書(shū)匯總信息”中。由于“訂購(gòu)商品”數(shù)據(jù)表中只有購(gòu)買數(shù)量、優(yōu)惠價(jià)格而沒(méi)有商品名稱,而“圖書(shū)信息”數(shù)據(jù)表中只有出版社ID而沒(méi)有出版社名稱,所以需要使用多表連接,統(tǒng)計(jì)各個(gè)出版社購(gòu)買圖書(shū)的數(shù)量合計(jì)和金額合計(jì)。【任務(wù)6-4】對(duì)查詢結(jié)果進(jìn)行排序從數(shù)據(jù)表中查詢數(shù)據(jù)時(shí),結(jié)果是按照數(shù)據(jù)被添加到數(shù)據(jù)表時(shí)的物理順序顯示的。在實(shí)際編程中,有時(shí)需要按照指定的字段進(jìn)行排序顯示,這就需要對(duì)查詢結(jié)果進(jìn)行排序。使用OrderBy子句可以對(duì)查詢結(jié)果集的相應(yīng)列進(jìn)行排序,排序方式分為升序排列和降序排列。Asc關(guān)鍵字表示升序,Desc關(guān)鍵字表示降序,默認(rèn)情況下為Asc,即按升序排列。OrderBy子句可以同時(shí)對(duì)多個(gè)列進(jìn)行排序。當(dāng)有多個(gè)排序列時(shí),每個(gè)排序列之間用半角逗號(hào)分隔,而且每個(gè)排序列后可以跟一個(gè)排序方式關(guān)鍵字。多列進(jìn)行排序時(shí),會(huì)先按第1列進(jìn)行排序,然后使用第2列對(duì)前面排序結(jié)果中相同的值再進(jìn)行排序。具體語(yǔ)法格式如下:OrderBy字段名稱1,字段名稱2,…,字段名稱n[Asc|Desc]【任務(wù)描述】(1)從“圖書(shū)信息”數(shù)據(jù)表中檢索價(jià)格在45元(不包含45元)以上的圖書(shū)信息,要求按價(jià)格的升序輸出。(2)從“圖書(shū)信息”數(shù)據(jù)表中檢索2019-9-1以后出版的圖書(shū)信息,要求按出版日期的降序輸出。(3)從“圖書(shū)信息”數(shù)據(jù)表中檢索所有的圖書(shū)信息,要求按出版日期的升序輸出,出版日期相同時(shí)按價(jià)格的降序輸出。查詢結(jié)果只包括“商品編號(hào)”“圖書(shū)名稱”“作者”“價(jià)格”“出版日期”5個(gè)字段?!救蝿?wù)實(shí)施】(1)檢索“圖書(shū)信息”數(shù)據(jù)表中價(jià)格在45元(不包含45元)以上的圖書(shū)信息對(duì)應(yīng)的SQL查詢語(yǔ)句如下:Select商品編號(hào),圖書(shū)名稱,作者,價(jià)格,出版日期From圖書(shū)信息Where價(jià)格>45OrderBy價(jià)格;該OrderBy子句省略了排序關(guān)鍵字,表示按升序排列,也就是價(jià)格低的圖書(shū)排在前面,價(jià)格高的圖書(shū)排在后面。(2)檢索“圖書(shū)信息”數(shù)據(jù)表中2019-9-1以后出版的圖書(shū)信息,并按降序輸出對(duì)應(yīng)的SQL查詢語(yǔ)句如下:Select商品編號(hào),圖書(shū)名稱,作者,價(jià)格,出版日期From圖書(shū)信息Where出版日期>'2019-09-01'OrderBy出版日期Desc;該OrderBy子句中排序關(guān)鍵字為Desc,也就是按出版日期的降序排列,即出版日期晚的排在前面,出版日期早的排在后面,例如“2021-05-01”排在“2021-02-01”之前。(3)按出版日期升序,價(jià)格降序輸出“圖書(shū)信息”數(shù)據(jù)表中的所有圖書(shū)信息對(duì)應(yīng)的SQL查詢語(yǔ)句如下:Select商品編號(hào),圖書(shū)名稱,作者,價(jià)格,出版日期From圖書(shū)信息OrderBy出版日期Asc,價(jià)格Desc;該OrderBy子句中第1個(gè)排序關(guān)鍵字為Asc,第2個(gè)排序關(guān)鍵字為Desc,表示先按“出版日期”的升序排列,即出版日期早的排在前面,出版日期晚的排在后面;當(dāng)出版日期相同時(shí),價(jià)格高的排在前面,價(jià)格低的排在后面?!救蝿?wù)6-5】分組進(jìn)行數(shù)據(jù)查詢一般情況下,使用統(tǒng)計(jì)函數(shù)返回的是所有行數(shù)據(jù)的統(tǒng)計(jì)結(jié)果。如果需要按某一列數(shù)據(jù)值進(jìn)行分組,在分組的基礎(chǔ)上再進(jìn)行查詢,就要使用GroupBy子句。如果要對(duì)分組或聚合指定查詢條件,則可以使用Having子句,該子句用于限定于對(duì)統(tǒng)計(jì)組的查詢。一般與GroupBy子句一起使用,對(duì)分組數(shù)據(jù)進(jìn)行過(guò)濾。具體語(yǔ)法格式如下:GroupBy字段名稱[Having<條件表達(dá)式>][WithRollup]>”用于限制分組后輸出結(jié)果,只有滿足條件表達(dá)式的結(jié)果才能顯示。如果使用WithRollup關(guān)鍵字,將會(huì)在所有記錄的最后加上一條記錄,該記錄為數(shù)據(jù)表各條記錄的總和。GroupBy關(guān)鍵字還可以和Group_Concat()函數(shù)一起使用,Group_Concat()函數(shù)把每個(gè)分組中指定字段值都顯示出來(lái)。【任務(wù)描述】(1)在“圖書(shū)信息”數(shù)據(jù)表中統(tǒng)計(jì)各出版社出版圖書(shū)的平均定價(jià)和圖書(shū)種數(shù),并使用WithRollup關(guān)鍵字再加上一條新的記錄,顯示全部記錄的平均價(jià)格和圖書(shū)總種數(shù)。(2)在“圖書(shū)信息”數(shù)據(jù)表中查詢圖書(shū)平均定價(jià)高于30元,并且圖書(shū)種數(shù)在5種(不包含5種)以上的出版社信息,查詢結(jié)果按平均定價(jià)降序排列。(3)在“圖書(shū)信息”數(shù)據(jù)表中統(tǒng)計(jì)各出版社出版圖書(shū)的平均定價(jià),并使用Group_Concat()函數(shù)將每家出版社所出版圖書(shū)的價(jià)格顯示出來(lái)。【任務(wù)實(shí)施】(1)在“圖書(shū)信息”數(shù)據(jù)表中統(tǒng)計(jì)各出版社出版圖書(shū)的平均定價(jià)和圖書(shū)種數(shù),并使用WithRollup關(guān)鍵字顯示全部記錄的平均價(jià)格和圖書(shū)總種數(shù)對(duì)應(yīng)的SQL查詢語(yǔ)句如下:Select出版社,Avg(價(jià)格)As平均定價(jià),Count(*)As圖書(shū)種數(shù)From圖書(shū)信息GroupBy出版社WithRollup;該查詢語(yǔ)句先對(duì)圖書(shū)按出版社信息進(jìn)行分組,然后計(jì)算各組的平均價(jià)格,統(tǒng)計(jì)各組的圖書(shū)種數(shù)。(2)在“圖書(shū)信息”數(shù)據(jù)表中查詢圖書(shū)平均定價(jià)高于30元,圖書(shū)種數(shù)在5種(不包含5種)以上的出版社信息,并按平均定價(jià)降序排列對(duì)應(yīng)的SQL查詢語(yǔ)句如下:Select出版社,Avg(價(jià)格)As平均定價(jià),Count(*)As圖書(shū)種數(shù)From圖書(shū)信息GroupBy出版社HavingAvg(價(jià)格)>30AndCount(*)>5OrderBy平均定價(jià)Desc;從邏輯上來(lái)看,該查詢語(yǔ)句的執(zhí)行順序如下。第1步,執(zhí)行“From圖書(shū)信息”,把圖書(shū)信息數(shù)據(jù)表中的數(shù)據(jù)全部檢索出來(lái)。第2步,對(duì)上一步獲取的數(shù)據(jù)使用“GroupBy出版社”進(jìn)行分組,計(jì)算每一組的平均價(jià)格和圖書(shū)種數(shù)。第3步,執(zhí)行“HavingAvg(價(jià)格)>30AndCount(*)>5”子句,對(duì)上一步中的分組數(shù)據(jù)進(jìn)行過(guò)濾,只有平均價(jià)格高于30元并且圖書(shū)種數(shù)超過(guò)5種的數(shù)據(jù)才能出現(xiàn)在最終的結(jié)果集中。第4步,對(duì)上一步獲得的結(jié)果進(jìn)行降序排列。第5步,按照Select子句指定的字段輸出結(jié)果。(3)使用各出版社出版圖書(shū)的平均定價(jià)和Group_Concat()函數(shù)查看每家出版社所出版圖書(shū)的價(jià)格對(duì)應(yīng)的SQL查詢語(yǔ)句如下:Select出版社,Avg(價(jià)格)As平均定價(jià),Group_Concat(價(jià)格)From圖書(shū)信息GroupBy出版社;對(duì)應(yīng)的查詢結(jié)果如圖所示。查詢結(jié)果從圖6-19所示的查詢結(jié)果可以看出,結(jié)果分為4組,對(duì)應(yīng)4家出版社,每家出版社所出版圖書(shū)的價(jià)格都顯示出來(lái)了,這說(shuō)明Group_Concat()函數(shù)可以很好地把分組情況顯示出來(lái)。
6.2創(chuàng)建多表連接查詢前面主要介紹了在一張數(shù)據(jù)表中進(jìn)行查詢的情況。在實(shí)際查詢中,例如,查詢圖書(shū)的詳細(xì)清單,包括圖書(shū)名稱、商品編號(hào)、出版社名稱、類型名稱、價(jià)格和出版日期等信息,就需要在3張數(shù)據(jù)表之間進(jìn)行查詢,使用連接查詢實(shí)現(xiàn)。因?yàn)椤皥D書(shū)信息”數(shù)據(jù)表中只有“出版社ID”和“類型編號(hào)”,不包括“出版社名稱”和“類型名稱”,“出版社名稱”在“出版社信息”數(shù)據(jù)表中,“類型名稱”在“商品類型”數(shù)據(jù)表中,實(shí)現(xiàn)從兩張或兩張以上的數(shù)據(jù)表中查詢數(shù)據(jù)且結(jié)果集中出現(xiàn)的字段來(lái)自兩張或兩張以上的數(shù)據(jù)表的檢索操作稱為連接查詢。連接查詢實(shí)際上是通過(guò)各張數(shù)據(jù)表之間的共同字段的相關(guān)性來(lái)查詢數(shù)據(jù)的,首先要在這些數(shù)據(jù)表中建立連接,然后再?gòu)臄?shù)據(jù)表中查詢數(shù)據(jù)。連接的類型分為內(nèi)連接、外連接和交叉連接。其中外連接包括左外連接、右外連接和全外連接3種。連接查詢的格式有如下兩種。格式一:Select<輸出字段或表達(dá)式列表>From<數(shù)據(jù)表1>,<數(shù)據(jù)表2>[Where<數(shù)據(jù)表1.列名><連接操作符><數(shù)據(jù)表2.列名>]連接操作符可以是“=”“<>”“!=”“>”“<”“<=”或“>=”,當(dāng)操作符是“=”時(shí)表示等值連接。格式二:Select<輸出字段或表達(dá)式列表>From<數(shù)據(jù)表1><連接類型><數(shù)據(jù)表2>[On(<連接條件>)]連接類型用于指定所執(zhí)行的連接類型,內(nèi)連接為InnerJoin,外連接為OutJoin,交叉連接為CrossJoin,左外連接為L(zhǎng)eftJoin,右外連接為RightJoin,全外連接為FullJoin。在“<輸出字段或表達(dá)式列表>”中使用多張數(shù)據(jù)表來(lái)源且有同名字段時(shí),就必須明確定義字段所在的數(shù)據(jù)表名稱。交叉連接又稱為笛卡兒積,返回的結(jié)果集的行數(shù)等于第1張數(shù)據(jù)表的行數(shù)乘以第2張數(shù)據(jù)表的行數(shù)。假如,“商品類型”數(shù)據(jù)表共有23條記錄,“圖書(shū)信息”數(shù)據(jù)表共有100條記錄,那么交叉連接的結(jié)果集會(huì)有2300(23×100)條記錄。交叉連接使用CrossJoin關(guān)鍵字來(lái)創(chuàng)建。交叉連接只用于測(cè)試一個(gè)數(shù)據(jù)庫(kù)的執(zhí)行效率,在實(shí)際應(yīng)用中使用機(jī)會(huì)較少?!救蝿?wù)6-6】創(chuàng)建基本連接查詢基本連接操作就是在Select語(yǔ)句的字段名稱或表達(dá)式列表中引用多張數(shù)據(jù)表的字段,其From子句中用半角逗號(hào)“,”將多張數(shù)據(jù)表的名稱分隔。使用基本連接操作時(shí),一般使從表中的外鍵字段與主表中的主鍵字段保持一致,以保持?jǐn)?shù)據(jù)的參照完整性?!救蝿?wù)描述】(1)在數(shù)據(jù)庫(kù)“MallDB”中,從“圖書(shū)信息”和“出版社信息”兩張數(shù)據(jù)表中查詢“人民郵電出版社”所出版圖書(shū)的詳細(xì)信息。要求查詢結(jié)果中包含“商品編號(hào)”“圖書(shū)名稱”“出版社名稱”“出版日期”等字段。(2)在數(shù)據(jù)庫(kù)“MallDB”中,從“訂購(gòu)商品”“圖書(shū)信息”和“出版社信息”3張數(shù)據(jù)表中查詢購(gòu)買數(shù)量超過(guò)兩本的圖書(shū)的詳細(xì)信息。要求查詢結(jié)果中包含“訂單編號(hào)”“商品編號(hào)”“圖書(shū)名稱”“出版社名稱”“購(gòu)買數(shù)量”等字段。
【任務(wù)實(shí)施】1.兩張數(shù)據(jù)表之間的連接查詢兩張數(shù)據(jù)表之間的連接查詢對(duì)應(yīng)的SQL查詢語(yǔ)句如下:Select圖書(shū)信息.商品編號(hào),圖書(shū)信息.圖書(shū)名稱,出版社信息.出版社名稱,圖書(shū)信息.出版日期From圖書(shū)信息,出版社信息Where圖書(shū)信息.出版社信息=出版社信息.出版社ID
And出版社信息.出版社名稱='人民郵電出版社';在上述的Select語(yǔ)句中,Select子句列表中的每個(gè)字段名稱前都指定了源表的名稱,以確定每個(gè)字段的來(lái)源。From子句中列出了兩張?jiān)幢淼拿Q“圖書(shū)信息”和“出版社信息”,使用半角逗號(hào)“,”隔開(kāi),Where子句中創(chuàng)建了一個(gè)等值連接。為了簡(jiǎn)化SQL查詢語(yǔ)句,增強(qiáng)可讀性,可以在Select語(yǔ)句中使用As關(guān)鍵字為數(shù)據(jù)表指定別名,當(dāng)然也可以省略As關(guān)鍵字。這里設(shè)置“圖書(shū)信息”的別名為“b”,“出版社信息”的別名為“p”,使用別名的SQL查詢語(yǔ)句如下所示,其查詢結(jié)果與前一條查詢語(yǔ)句完全相同:Selectb.商品編號(hào),b.圖書(shū)名稱,p.出版社名稱,b.出版日期From圖書(shū)信息Asb,出版社信息AspWhereb.出版社信息=p.出版社IDAndp.出版社名稱='人民郵電出版社';由于“圖書(shū)信息”和“出版社信息”兩張數(shù)據(jù)表沒(méi)有同名字段,上述查詢語(yǔ)句各個(gè)字段名稱之前的表名也可以省略,不會(huì)產(chǎn)生歧義,查詢結(jié)果也相同。省略表名的查詢語(yǔ)句如下:Select商品編號(hào),圖書(shū)名稱,出版社名稱,出版日期From圖書(shū)信息,出版社信息Where圖書(shū)信息.出版社=出版社信息.出版社IDAnd出版社名稱='人民郵電出版社';為了增強(qiáng)SQL查詢語(yǔ)句的可讀性,避免產(chǎn)生歧義,多表查詢時(shí)最好保留字段名稱前面的表名。2.多表連接查詢?cè)诙鄰垟?shù)據(jù)表之間創(chuàng)建連接查詢與在兩張數(shù)據(jù)表之間創(chuàng)建連接查詢相似,只是在Where子句中需要使用多個(gè)And關(guān)鍵字連接兩個(gè)連接條件。多張數(shù)據(jù)表之間的連接查詢對(duì)應(yīng)的SQL查詢語(yǔ)句如下:Select訂購(gòu)商品.訂單編號(hào),訂購(gòu)商品.商品編號(hào),圖書(shū)信息.圖書(shū)名稱,出版社信息.出版社名稱,訂購(gòu)商品.購(gòu)買數(shù)量From訂購(gòu)商品,圖書(shū)信息,出版社信息Where訂購(gòu)商品.商品編號(hào)=圖書(shū)信息.商品編號(hào)And圖書(shū)信息.出版社=出版社信息.出版社IDAnd購(gòu)買數(shù)量>2;在上述的Select語(yǔ)句中,F(xiàn)rom子句中列出了3張?jiān)幢恚琖here子句中包含了兩個(gè)等值連接條件和一個(gè)查詢條件,當(dāng)這兩個(gè)連接條件都為True時(shí),才返回結(jié)果。如果只需查詢“人民郵電出版社”所出版的購(gòu)買數(shù)量超過(guò)兩本(不包含兩本)的圖書(shū)信息,所涉及的SQL查詢語(yǔ)句如下:Select訂購(gòu)商品.訂單編號(hào),訂購(gòu)商品.商品編號(hào),圖書(shū)信息.圖書(shū)名稱,出版社信息.出版社名稱,訂購(gòu)商品.購(gòu)買數(shù)量From訂購(gòu)商品,圖書(shū)信息,出版社信息Where訂購(gòu)商品.商品編號(hào)=圖書(shū)信息.商品編號(hào)And圖書(shū)信息.出版社=出版社信息.出版社IDAnd購(gòu)買數(shù)量>2And出版社信息.出版社名稱='人民郵電出版社';Where子句中包含了兩個(gè)等值連接條件和兩個(gè)查詢條件。【任務(wù)6-7】創(chuàng)建內(nèi)連接查詢內(nèi)連接是組合兩張數(shù)據(jù)表的常用方法。內(nèi)連接使用比較運(yùn)算符進(jìn)行多張?jiān)幢碇g數(shù)據(jù)的比較,并返回這些源表中與連接條件相匹配的數(shù)據(jù)記錄。一般使用Join或者InnerJoin關(guān)鍵字實(shí)現(xiàn)內(nèi)鏈接。內(nèi)連接執(zhí)行連接查詢后,要從查詢結(jié)果中刪除在其他數(shù)據(jù)表中沒(méi)有匹配行的所有記錄,所以使用內(nèi)連接可能不會(huì)顯示數(shù)據(jù)表的所有記錄。內(nèi)連接可以分為等值連接、非等值連接和自然連接。在連接條件中使用的比較運(yùn)算符為“=”時(shí),該連接操作稱為等值連接。在連接條件使用其他運(yùn)算符(包括“<”“>”“<=”“>=”“<>”“!>”“!<”“Between”等)的內(nèi)連接稱為非等值連接。當(dāng)?shù)戎颠B接中的連接字段相同,并且在Select語(yǔ)句中去除了重復(fù)字段時(shí),該連接操作稱為自然連接。【任務(wù)描述】(1)從“客戶信息”和“訂單信息”兩張數(shù)據(jù)表中查詢購(gòu)買了商品的客戶信息,要求查詢結(jié)果顯示客戶姓名、訂單編號(hào)、訂單狀態(tài)。(2)從“圖書(shū)信息”和“商品類型”兩張數(shù)據(jù)表中查詢2020年1月1日到2021年10月1日之間出版的價(jià)格在30元(不包含30元)以上的類型為“圖書(shū)”的商品信息,要求查詢結(jié)果顯示“圖書(shū)名稱”“價(jià)格”“出版日期”“商品類型”名稱4列數(shù)據(jù)。【任務(wù)實(shí)施】(1)查詢購(gòu)買了商品的客戶信息對(duì)應(yīng)的SQL查詢語(yǔ)句如下:Select客戶信息.客戶姓名,訂單信息.訂單編號(hào),訂單信息.訂單狀態(tài)From客戶信息InnerJoin訂單信息On客戶信息.客戶ID=訂單信息.客戶;有關(guān)客戶的數(shù)據(jù)存放在“客戶信息”數(shù)據(jù)表中,有關(guān)訂單的數(shù)據(jù)存放在“訂單信息”數(shù)據(jù)表中。本查詢語(yǔ)句涉及“客戶信息”和“訂單信息”兩張數(shù)據(jù)表,這兩張數(shù)據(jù)表之間通過(guò)共同的字段“客戶ID”連接起來(lái),所以From子句為“From客戶信息InnerJoin訂單信息On客戶信息.客戶ID=訂單信息.客戶”。由于查詢的字段來(lái)自不同的數(shù)據(jù)表,因此需在Select子句中寫(xiě)明源表名。(2)查詢2020年1月1日到2021年10月1日之間出版的價(jià)格在30元(不包含30元)以上的圖書(shū)信息對(duì)應(yīng)的SQL查詢語(yǔ)句如下:Select圖書(shū)信息.圖書(shū)名稱,圖書(shū)信息.出版日期,圖書(shū)信息.價(jià)格,商品類型.類型名稱From圖書(shū)信息InnerJoin商品類型On圖書(shū)信息.商品類型=商品類型.類型編號(hào)And圖書(shū)信息.出版日期Between'2020-01-01'And'2021-10-01'And圖書(shū)信息.價(jià)格>30And商品類型.類型名稱='圖書(shū)';由于“出版日期”數(shù)據(jù)存放在“圖書(shū)信息”數(shù)據(jù)表中,“類型名稱”數(shù)據(jù)存放在“商品類型”數(shù)據(jù)表中,本查詢需要涉及兩張數(shù)據(jù)表,On關(guān)鍵字后的連接條件使用了“Between”范圍運(yùn)算符和“>”運(yùn)算符?!救蝿?wù)6-8】創(chuàng)建外連接查詢?cè)趦?nèi)連接中,只有在兩張數(shù)據(jù)表中匹配的記錄才能在結(jié)果集中出現(xiàn)。而在外連接中可以只限制一張數(shù)據(jù)表,而對(duì)另一張數(shù)據(jù)表不加限制(即所有的記錄都出現(xiàn)在結(jié)果集中)。外連接分為左外連接、右外連接和全外連接。只包括左表的所有記錄,不包括右表的不匹配記錄的外連接稱為左外連接;只包括右表的所有記錄,不包括左表的不匹配記錄的外連接稱為右外連接;既包括左表不匹配的記錄,又包括右表不匹配的記錄的連接稱為全外連接。【任務(wù)描述】(1)創(chuàng)建左外連接查詢。從“商品類型”和“圖書(shū)信息”兩張數(shù)據(jù)表中查詢所有商品類型的圖書(shū)信息,要求查詢結(jié)果顯示“類型名稱”“圖書(shū)名稱”“價(jià)格”3列數(shù)據(jù)。(2)創(chuàng)建右外連接查詢。從“訂單信息”和“客戶信息”兩張數(shù)據(jù)表中查詢所有客戶的購(gòu)買商品情況,要求查詢結(jié)果顯示“客戶ID”“客戶姓名”“訂單編號(hào)”“應(yīng)付總額”4列數(shù)據(jù)?!救蝿?wù)實(shí)施】1.創(chuàng)建左外連接查詢?cè)谧笸膺B接查詢中,左表就是主表,右表就是從表。左外連接返回關(guān)鍵字LeftJoin左邊的表中所有的行,但是這些行必須符合查詢條件。如果左表的某些數(shù)據(jù)記錄沒(méi)有在右表中找到相應(yīng)的匹配數(shù)據(jù)記錄,則結(jié)果集中右表的對(duì)應(yīng)位置填入Null。創(chuàng)建左外連接查詢對(duì)應(yīng)的SQL查詢語(yǔ)句如下:Select商品類型.類型名稱,圖書(shū)信息.圖書(shū)名稱,圖書(shū)信息.價(jià)格From商品類型leftJoin圖書(shū)信息On商品類型.類型編號(hào)=圖書(shū)信息.商品類型;在上面的Select語(yǔ)句中,“商品類型”數(shù)據(jù)表為主表,即左表,“圖書(shū)信息”數(shù)據(jù)表為從表,即右表,On關(guān)鍵字后面是左外連接的條件。由于要查詢所有的商品類型,所以所有商品類型都會(huì)出現(xiàn)結(jié)果集中,同一種商品類型在“圖書(shū)信息”表中有多條記錄的,商品類型會(huì)重復(fù)出現(xiàn)多次。2.創(chuàng)建右外連接查詢?cè)谟彝膺B接查詢中,右表就是主表,左表就是從表。右外連接返回關(guān)鍵字RightJoin右邊表中所有的行,但是這些行必須符合查詢條件。右外連接是左外連接的反向,如果右表的某些數(shù)據(jù)記錄沒(méi)有在左表中找到相應(yīng)匹配的數(shù)據(jù)記錄,則結(jié)果集中左表的對(duì)應(yīng)位置填入Null。創(chuàng)建右外連接查詢對(duì)應(yīng)的SQL查詢語(yǔ)句如下:Select訂單信息.訂單編號(hào),訂單信息.應(yīng)付總額,客戶信息.客戶ID,客戶信息.客戶姓名From訂單信息RightJoin客戶信息On訂單信息.客戶=客戶信息.客戶ID;在上面的Select語(yǔ)句中,“客戶信息”是主表,“訂單信息”是從表,On關(guān)鍵字后面的是右外連接的條件。由于要查詢所有客戶的購(gòu)買商品情況,所以采用右外連接查詢?!救蝿?wù)6-9】使用Union語(yǔ)句創(chuàng)建多表聯(lián)合查詢聯(lián)合查詢是指將多個(gè)不同的查詢結(jié)果連接在一起組成一組新數(shù)據(jù)的查詢方式。聯(lián)合查詢使用Union關(guān)鍵字連接各個(gè)Select子句,聯(lián)合查詢不是對(duì)兩張數(shù)據(jù)表中的字段進(jìn)行連接查詢,而是組合兩張數(shù)據(jù)表中的記錄。使用Union關(guān)鍵字進(jìn)行聯(lián)合查詢時(shí),應(yīng)保證聯(lián)合的數(shù)據(jù)表中具有相同數(shù)量的字段,并且對(duì)應(yīng)的字段應(yīng)具有相同的數(shù)據(jù)類型,或者系統(tǒng)可以自動(dòng)將其轉(zhuǎn)換為相同的數(shù)據(jù)類型。在自動(dòng)轉(zhuǎn)換數(shù)據(jù)類型時(shí),對(duì)于數(shù)值類型,系統(tǒng)會(huì)將低精度的數(shù)據(jù)類型轉(zhuǎn)換為高精度的數(shù)據(jù)類型。Union語(yǔ)句的語(yǔ)法格式如下:Select語(yǔ)句1Union|UnionAllSelect語(yǔ)句2Union|UnionAllSelect語(yǔ)句n;使用Union運(yùn)算符將兩個(gè)或多個(gè)Select語(yǔ)句的結(jié)果組合成一個(gè)結(jié)果集時(shí),可以使用關(guān)鍵字All,指定結(jié)果集中將包含所有記錄而不刪除重復(fù)的記錄。如果省略All,將從結(jié)果集中刪除重復(fù)的記錄。使用Union關(guān)鍵字進(jìn)行聯(lián)合查詢時(shí),結(jié)果集的字段名稱與Union運(yùn)算符中第1個(gè)Select語(yǔ)句的結(jié)果集中的字段名稱相同,其他Select語(yǔ)句的結(jié)果集的字段名稱將被忽略?!救蝿?wù)描述】數(shù)據(jù)庫(kù)“MallDB”的“訂購(gòu)商品”數(shù)據(jù)表中的數(shù)據(jù)主要包括“商品”和“圖書(shū)”兩大類,“MallDB”數(shù)據(jù)庫(kù)中已有“商品信息”數(shù)據(jù)表和“圖書(shū)信息”數(shù)據(jù)表,其中兩張數(shù)據(jù)表包括4個(gè)公共字段,分別為“商品編號(hào)”“名稱”“商品類型”和“價(jià)格”。使用聯(lián)合查詢將兩張數(shù)據(jù)表的數(shù)據(jù)合并(商品數(shù)據(jù)在前,圖書(shū)數(shù)據(jù)在后),聯(lián)合查詢時(shí)增加一個(gè)新列“商品分類”,其值分別為“非圖書(shū)商品”和“圖書(shū)”?!救蝿?wù)實(shí)施】對(duì)應(yīng)的SQL查詢語(yǔ)句如下:Select商品編號(hào),商品名稱,商品類型As商品類型編號(hào),價(jià)格,'非圖書(shū)商品'As商品分類From商品信息UnionAllSelect商品編號(hào),圖書(shū)名稱,商品類型As商品類型編號(hào),價(jià)格,'圖書(shū)'From圖書(shū)信息;6.3創(chuàng)建嵌套查詢和子查詢?cè)趯?shí)際應(yīng)用中,經(jīng)常要用到多層查詢。在SQL語(yǔ)句中,將一條Select語(yǔ)句作為另一條Select語(yǔ)句的一部分的情況稱為嵌套查詢,也可以稱子查詢。外層的Select語(yǔ)句稱為外部查詢,內(nèi)層的Select語(yǔ)句稱為內(nèi)部查詢。嵌套查詢是按照邏輯順序由里向外執(zhí)行的,即先處理內(nèi)部查詢,然后將結(jié)果用于外部查詢的查詢條件。SQL允許使用多層嵌套查詢,即子查詢中還可以嵌套其他子查詢?!救蝿?wù)6-10】創(chuàng)建單值嵌套查詢單值嵌套就是通過(guò)子查詢返回一個(gè)單一的數(shù)據(jù)值。當(dāng)子查詢返回的結(jié)果是單個(gè)值時(shí),可以使用比較運(yùn)算符(包括“<”“>”“<=”“>=”和“<>”等)參與相關(guān)表達(dá)式的運(yùn)算?!救蝿?wù)描述】(1)查找圖書(shū)《HTML5+CSS3網(wǎng)頁(yè)設(shè)計(jì)與制作實(shí)戰(zhàn)》是由哪一家出版社出版的。(2)向“圖書(shū)信息”數(shù)據(jù)表中添加下表所示的兩條圖書(shū)記錄。添加的兩條圖書(shū)記錄商品編號(hào)圖書(shū)名稱商品類型價(jià)格出版社ISBN作者版次開(kāi)本出版日期12462164Python程序設(shè)計(jì)基礎(chǔ)教程t130129.80元19787115488107薛景116開(kāi)2020-09-1633026249大數(shù)據(jù)分析與挖掘t130137.10元19787115483058石勝飛116開(kāi)2020-09-16然后從“圖書(shū)信息”數(shù)據(jù)表中查找價(jià)格最低并且出版日期最晚的圖書(shū)信息?!救蝿?wù)實(shí)施】(1)查找圖書(shū)《HTML5+CSS3網(wǎng)頁(yè)設(shè)計(jì)與制作實(shí)戰(zhàn)》是由哪一家出版社出版的。由于“圖書(shū)信息”數(shù)據(jù)表中只存儲(chǔ)了“商品名稱”和“出版社ID”,沒(méi)有存儲(chǔ)“出版社名稱”,有關(guān)出版社信息的數(shù)據(jù)存儲(chǔ)在“出版社信息”數(shù)據(jù)表中,所以分兩步完成查詢。第1步,從“圖書(shū)信息”數(shù)據(jù)表中查詢《HTML5+CSS3網(wǎng)頁(yè)設(shè)計(jì)與制作實(shí)戰(zhàn)》對(duì)應(yīng)的出版社ID,并記下其值,查詢語(yǔ)句如下:Select圖書(shū)名稱,出版社From圖書(shū)信息Where圖書(shū)名稱='HTML5+CSS3網(wǎng)頁(yè)設(shè)計(jì)與制作實(shí)戰(zhàn)';執(zhí)行該查詢語(yǔ)句,其查詢結(jié)果如圖所示。由圖可知,《HTML5+CSS3網(wǎng)頁(yè)設(shè)計(jì)與制作實(shí)戰(zhàn)》對(duì)應(yīng)的出版社ID為“1”。查詢《HTML5+CSS3網(wǎng)頁(yè)設(shè)計(jì)與制作實(shí)戰(zhàn)》對(duì)應(yīng)的出版社ID的結(jié)果第2步,從“出版社信息”數(shù)據(jù)表中查詢出版社ID為“1”的出版社名稱,查詢語(yǔ)句如下:Select出版社ID,出版社名稱From出版社信息Where出版社ID='1';執(zhí)行該查詢語(yǔ)句,得到的查詢的結(jié)果如圖所示。由圖可知,《HTML5+CSS3網(wǎng)頁(yè)設(shè)計(jì)與制作實(shí)戰(zhàn)》對(duì)應(yīng)的出版社名稱為“人民郵電出版社”。查詢出版社ID為“1”的出版社名稱的結(jié)果也可以利用嵌套查詢,將以上兩個(gè)步驟的查詢語(yǔ)句組合成一條查詢語(yǔ)句,將步驟1的查詢語(yǔ)句作為步驟2的查詢語(yǔ)句的子查詢,對(duì)應(yīng)的SQL查詢語(yǔ)句如下:Select出版社ID,出版社名稱From出版社信息Where出版社ID=(Select出版社From圖書(shū)信息Where圖書(shū)名稱='HTML5+CSS3網(wǎng)頁(yè)設(shè)計(jì)與制作實(shí)戰(zhàn)');(2)添加新記錄后,從“圖書(shū)信息”數(shù)據(jù)表中查找價(jià)格最低并且出版日期最晚的圖書(shū)信息。首先向“圖書(shū)信息”數(shù)據(jù)表中添加上表所示的兩條圖書(shū)記錄。然后從“圖書(shū)信息”數(shù)據(jù)表中查找價(jià)格最低并且出版日期最晚的圖書(shū)信息。將OrderBy與Limit關(guān)鍵字結(jié)合,輸出商品編號(hào)、圖書(shū)名稱、出版日期、價(jià)格的SQL查詢語(yǔ)句如下:Select商品編號(hào),圖書(shū)名稱,出版日期,價(jià)格From圖書(shū)信息Where價(jià)格=(SelectMin(價(jià)格)From圖書(shū)信息)OrderBy出版日期DescLimit1;該SQL語(yǔ)句的運(yùn)行結(jié)果如圖所示。從“圖書(shū)信息”數(shù)據(jù)表中查找價(jià)格最低并且出版日期最晚的圖書(shū)信息的運(yùn)行結(jié)果使用聚合函數(shù)Max()只輸出出版日期和價(jià)格的SQL查詢語(yǔ)句如下:SelectMax(出版日期)As出版日期,價(jià)格From圖書(shū)信息Where價(jià)格=(SelectMin(價(jià)格)From圖書(shū)信息)GroupBy價(jià)格;該查詢語(yǔ)句包含了兩層嵌套,內(nèi)層的子查詢“SelectMin(價(jià)格)From圖書(shū)信息”獲取“圖書(shū)信息”數(shù)據(jù)表中的最低價(jià)格數(shù)據(jù),然后作為外層子查詢的條件,獲取價(jià)格最低的圖書(shū)中出版日期最晚的圖書(shū)信息?!救蝿?wù)6-11】使用In關(guān)鍵字創(chuàng)建子查詢子查詢的返回結(jié)果是多個(gè)值的嵌套查詢稱為多值嵌套查詢。多值嵌套查詢經(jīng)常使用In關(guān)鍵字,In關(guān)鍵字可以測(cè)試表達(dá)式的值是否與子查詢返回結(jié)果集中的某一個(gè)值相等,如果字段值與子查詢的結(jié)果一致或結(jié)果集中存在與之匹配的數(shù)據(jù)記錄,則查詢結(jié)果集中就包含該數(shù)據(jù)記錄?!救蝿?wù)描述】(1)在“客戶信息”數(shù)據(jù)表中添加一個(gè)客戶,新增加客戶對(duì)應(yīng)的信息如下:客戶ID為9,客戶姓名為江靜,地址為深圳市深南大道10000號(hào),聯(lián)系電話為38638328,郵政編碼為518057,該客戶為新增客戶,沒(méi)有購(gòu)買商品的記
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電力分包技術(shù)服務(wù)合同
- 文化創(chuàng)意行業(yè)作品征集表格
- 《物質(zhì)的基本屬性與狀態(tài):九年級(jí)科學(xué)物理教案》
- 湖北省孝感市漢川市2024-2025學(xué)年七年級(jí)上學(xué)期期末生物學(xué)試題(含答案)
- 年度團(tuán)建活動(dòng)設(shè)計(jì)與執(zhí)行方案
- 自動(dòng)售貨機(jī)銷售合同協(xié)議
- 公司內(nèi)部事務(wù)處理指南
- 城市地鐵線路建設(shè)與運(yùn)營(yíng)合同
- 企業(yè)與政府合作的環(huán)保協(xié)議
- 煤炭國(guó)際貿(mào)易合同
- 人工智能融入土木水利碩士人才培養(yǎng)模式研究
- 人工智能賦能新質(zhì)生產(chǎn)力發(fā)展:現(xiàn)狀解析與未來(lái)展望
- 2024版非ST段抬高型急性冠脈綜合征診斷和治療指南解讀
- 2021年安徽省中考數(shù)學(xué)試卷-普通卷
- 2024年河南省鄭州市公開(kāi)招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 萬(wàn)用表使用方法
- 民事訴訟法-教學(xué)課件
- 銀行網(wǎng)點(diǎn)裝修工程施工組織設(shè)計(jì)方案
- 《服裝零售管理實(shí)習(xí)》課程教學(xué)大綱
- 【MOOC】跨文化交際入門-華中師范大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 綠色金融與ESG分析
評(píng)論
0/150
提交評(píng)論