版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
PAGE20PAGE20PAGE19PAGE19
課題單表數(shù)據(jù)記錄查詢課時(shí)2課時(shí)(90min)教學(xué)目標(biāo)知識(shí)技能目標(biāo):(1)了解基本查詢語(yǔ)句(2)掌握查詢所有字段和指定字段的方法(3)掌握使用常用關(guān)鍵字實(shí)現(xiàn)簡(jiǎn)單查詢的方法(4)掌握使用聚合函數(shù)結(jié)合GROUPBY實(shí)現(xiàn)分組查詢的方法質(zhì)目標(biāo):(1)了解我國(guó)文學(xué)名著,培養(yǎng)文化自信(2)懂得做事應(yīng)腳踏實(shí)地、認(rèn)真負(fù)責(zé)教學(xué)重難點(diǎn)教學(xué)重點(diǎn):基本查詢語(yǔ)句,使用不同方式進(jìn)行查詢教學(xué)難點(diǎn):使用聚合函數(shù)結(jié)合GROUPBY實(shí)現(xiàn)分組查詢的方法教學(xué)方法案例分析法、問(wèn)答法、討論法、講授法、實(shí)踐法教學(xué)用具電腦、投影儀、多媒體課件、教材教學(xué)設(shè)計(jì)第1節(jié)課:→→→傳授新知(38min)第2節(jié)課:→傳授新知(20min)→課堂實(shí)訓(xùn)(15min)→課堂小結(jié)(3min)→作業(yè)布置(2min)教學(xué)過(guò)程主要教學(xué)內(nèi)容及步驟設(shè)計(jì)意圖第一節(jié)課課前任務(wù)【教師】布置課前任務(wù),和學(xué)生負(fù)責(zé)人取得聯(lián)系,讓其提醒同學(xué)通過(guò)文旌課堂APP或其他學(xué)習(xí)軟件,預(yù)習(xí)本節(jié)課要學(xué)習(xí)的知識(shí)【學(xué)生】完成課前任務(wù)通過(guò)課前任務(wù),使學(xué)生預(yù)習(xí)本節(jié)課要學(xué)習(xí)的知識(shí),增加學(xué)生的學(xué)習(xí)興趣考勤(2min)【教師】使用文旌課堂APP進(jìn)行簽到【學(xué)生】班干部報(bào)請(qǐng)假人員及原因培養(yǎng)學(xué)生的組織紀(jì)律性,掌握學(xué)生的出勤情況問(wèn)題導(dǎo)入(5min)【教師】提出以下問(wèn)題:如何查詢數(shù)據(jù)庫(kù)中所需的數(shù)據(jù)記錄呢?通過(guò)問(wèn)題導(dǎo)入,引導(dǎo)學(xué)生主動(dòng)思考,激發(fā)學(xué)生的學(xué)習(xí)興趣傳授新知(38min)【教師】通過(guò)學(xué)生的回答引入要講的知識(shí),講解基本查詢語(yǔ)句和簡(jiǎn)單數(shù)據(jù)記錄查詢的相關(guān)知識(shí)7.1基本查詢語(yǔ)句?【教師】組織學(xué)生掃碼觀看“基本查詢語(yǔ)句”視頻(詳見(jiàn)教材),讓學(xué)生對(duì)基本格式有一個(gè)大致的了解單表查詢是指從一張數(shù)據(jù)表中查詢所需要的數(shù)據(jù)。本節(jié)首先簡(jiǎn)單認(rèn)識(shí)一下基本查詢語(yǔ)句。SELECT {*|<字段列表>} [ FROM<表1>,<表2>… [WHERE<表達(dá)式> [GROUPBY<groupbydefinition>] [HAVING<expression>[{<operator><expression>}…]] [ORDERBY<orderbydefinition>] [LIMIT[<offset>,]<rowcount>] ];上述各條子句的含義如下:{*|<字段列表>}:使用星號(hào)通配符或者字段列表表示要查詢的字段,其中字段列表至少要包含一個(gè)字段名稱,如果要查詢多個(gè)字段,字段之間用逗號(hào)隔開(kāi),最后一個(gè)字段后不加逗號(hào)。FROM<表1>,<表2>…:表1和表2表示查詢數(shù)據(jù)的來(lái)源,可以是單個(gè)或者多個(gè)。WHERE子句:可選,用于限定查詢行必須滿足的查詢條件。GROUPBY<字段>:該子句表示按照指定的字段對(duì)查詢出來(lái)的數(shù)據(jù)進(jìn)行分組。ORDERBY<字段>:該子句表示按照什么樣的順序顯示查詢出來(lái)的數(shù)據(jù),有兩種情況:升序(ASC)和降序(DESC)。[LIMIT[<offset>,]<rowcount>]:表示每次顯示的查詢出來(lái)的數(shù)據(jù)條數(shù)。SELECT可選參數(shù)比較多,讀者可能無(wú)法一下完全理解,后面將從最簡(jiǎn)單的語(yǔ)句開(kāi)始,一步一步深入學(xué)習(xí)。7.2簡(jiǎn)單數(shù)據(jù)記錄查詢?【教師】組織學(xué)生掃碼觀看“簡(jiǎn)單查詢”視頻(詳見(jiàn)教材),讓學(xué)生對(duì)基本查詢有一個(gè)大致的了解簡(jiǎn)單數(shù)據(jù)記錄查詢主要包括:查詢所有字段、查詢指定字段、查詢指定記錄、多條件查詢、排序查詢等。本節(jié)將以第5章創(chuàng)建的goods表為操作對(duì)象,講解簡(jiǎn)單數(shù)據(jù)記錄查詢的具體實(shí)現(xiàn)方法,如果表內(nèi)還沒(méi)有數(shù)據(jù),執(zhí)行以下語(yǔ)句在其中插入數(shù)據(jù)。INSERTINTOgoods(id,type,name,price,num,add_time)VALUES(1,'書(shū)籍','西游記',50.4,20,'2018-01-0113:40:40'),(2,'糖類','牛奶糖',7.5,200,'2018-02-0213:40:40'),(3,'糖類','水果糖',2.5,100,null),(4,'服飾','休閑西服',800,null,'2018-04-0413:40:40'),(5,'飲品','果汁',3,70,'2018-05-0513:40:40');7.2.1查詢所有字段查詢所有字段數(shù)據(jù),是指從一張表中檢索出所有記錄,查詢方式有兩種,一種是使用通配符“*”,另一種是列出所有字段名,語(yǔ)法形式如下:SELECT{*|col_list}FROMtable_name;上述語(yǔ)句中,col_list表示數(shù)據(jù)表中的字段列表,如果表中字段有多個(gè),字段之間需要使用逗號(hào)隔開(kāi),最后一個(gè)字段不加逗號(hào)。正如1.4.1節(jié)所述,SQL語(yǔ)言是高級(jí)的非過(guò)程化編程語(yǔ)言,用戶使用查詢語(yǔ)句時(shí),應(yīng)至少指明兩點(diǎn),一是查詢什么,二是在什么位置查詢。語(yǔ)句中的通配符“*”或“col_list”指明了需要查詢的是數(shù)據(jù)表中的所有字段,而表名指明了查詢位置。【實(shí)例7-1】使用通配符“*”查詢goods表中所有數(shù)據(jù),SQL語(yǔ)句及其執(zhí)行結(jié)果如下。mysql>SELECT*FROMgoods;+++++++|id |type |name |price |num |add_time |+++++++|1|書(shū)籍 |西游記 |50.40 |20 |2018-01-0113:40:40 ||2|糖類 |牛奶糖 |7.50 |200 |2018-02-0213:40:40 ||3|糖類 |水果糖 |2.50 |100 |NULL ||4|服飾 |休閑西服 |800.00 |NULL |2018-04-0413:40:40 ||5|飲品 |果汁 |3.00 |70 |2018-05-0513:40:40 |+++++++5rowsinset(0.00sec)可以看出,使用通配符“*”可以返回?cái)?shù)據(jù)表中所有列數(shù)據(jù)。通過(guò)在SELECT關(guān)鍵字后面列出所有字段名,也可以查詢所有列數(shù)據(jù),SQL語(yǔ)句如下,其查詢結(jié)果與實(shí)例7-1的結(jié)果相同。SELECTid,type,name,price,num,add_timeFROMgoods;【知識(shí)庫(kù)】一般使用通配符查詢表中所有字段數(shù)據(jù);而使用列出字段名的方式查詢部分字段數(shù)據(jù),具體方法將在7.2.2節(jié)介紹。7.2.2查詢指定字段使用SELECT關(guān)鍵字也可以查詢指定字段的數(shù)據(jù),語(yǔ)法形式如下:SELECTcol_name1[,col_name2,……,col_namen]FROMtable_name;上述語(yǔ)句可以查詢單個(gè)字段,也可以查詢多個(gè)字段。當(dāng)查詢多個(gè)字段時(shí),各個(gè)字段之間使用英文格式的逗號(hào)隔開(kāi),最后一個(gè)字段不加逗號(hào);查詢一個(gè)字段時(shí)也不需要加逗號(hào)?!緦?shí)例7-2】從goods表中查詢單個(gè)字段。執(zhí)行SQL語(yǔ)句,查詢goods表中的name字段數(shù)據(jù),執(zhí)行結(jié)果如下:mysql>SELECTnameFROMgoods;++|name|++|休閑西服||果汁||水果糖||牛奶糖||西游記|++5rowsinset(0.00sec)【實(shí)例7-3】從goods表中查詢多個(gè)字段。執(zhí)行SQL語(yǔ)句,查詢goods表中的id和name字段數(shù)據(jù),結(jié)果如下:mysql>SELECTid,nameFROMgoods;+++|id |name|+++|4|休閑西服||5|果汁||3|水果糖||2|牛奶糖||1|西游記|+++5rowsinset(0.00sec)7.2.3查詢指定記錄當(dāng)用戶需要查詢數(shù)據(jù)庫(kù)中符合一定條件的數(shù)據(jù)時(shí),可以使用WHERE子句對(duì)表中的記錄進(jìn)行篩選,語(yǔ)法形式如下:SELECT{*|col_list}FROMtable_nameWHEREcondition;WHERE子句中可以使用多種條件判斷符,如表7-1所示。?【教師】通過(guò)多媒體展示“WHERE子句中可用的條件判斷符”表格,介紹相關(guān)知識(shí)表7-1WHERE子句中可用的條件判斷符條件判斷符說(shuō)明=相等<小于>大于<>(!=)不相等<=小于或者等于>=大于或者等于注:“<>”和“!=”功能相同。下面以其中的兩個(gè)符號(hào)為例,簡(jiǎn)單介紹WHERE子句的應(yīng)用。1.使用“=”符號(hào)查詢【實(shí)例7-4】從goods表中查詢id值為3的記錄。SQL語(yǔ)句及其執(zhí)行結(jié)果如下:mysql>SELECT*FROMgoodsWHEREid=3;+++++++|id |type |name|price |num |add_time |+++++++|3 |糖類 |水果糖|2.50 |100 |NULL |+++++++1rowinset(0.06sec)判斷符既可以用于比較數(shù)值,也可以用于比較字符串?!緦?shí)例7-5】從goods表中查詢type值為“糖類”的記錄。SQL語(yǔ)句及其執(zhí)行結(jié)果如下:mysql>SELECT*FROMgoodsWHEREtype='糖類';+++++++|id |type|name|price|num|add_time |+++++++|2 |糖類|牛奶糖|7.50|200 |2018-02-0213:40:40 ||3 |糖類|水果糖|2.50|100 |NULL |+++++++2rowsinset(0.00sec)可以看出,表中type值為“糖類”的記錄全被查詢出來(lái)了。2.使用“>=”符號(hào)查詢【實(shí)例7-6】從goods表中查詢num值大于等于100的記錄。SQL語(yǔ)句及其執(zhí)行結(jié)果如下:mysql>SELECT*FROMgoodsWHEREnum>=100;+++++++|id |type |name |price |num |add_time |+++++++|2|糖類 |牛奶糖 |7.50 |200 |2018-02-0213:40:40 ||3|糖類 |水果糖 |2.50 |100 |NULL |+++++++2rowsinset(0.00sec)可以看出,表中num值大于等于100的記錄全被查詢出來(lái)了。7.2.4多條件查詢1.使用AND關(guān)鍵字查詢MySQL支持多條件查詢,如果條件之間使用AND關(guān)鍵字連接,那么只有符合所有條件的記錄才會(huì)被返回?!緦?shí)例7-7】從goods表中查詢price值大于50,并且id值大于3的記錄。SQL語(yǔ)句及其執(zhí)行結(jié)果如下:mysql>SELECT*FROMgoodsWHEREprice>50ANDid>3;+++++++|id |type |name |price|num |add_time |+++++++|4 |服飾 |休閑西服 |800.00|NULL |2018-04-0413:40:40 |+++++++1rowinset(0.06sec)【提示】上例中的WHERE子句中只包含了一個(gè)AND關(guān)鍵字,實(shí)際上可以添加多個(gè)篩選條件,增加一個(gè)條件的同時(shí)需要增加一個(gè)AND關(guān)鍵字。2.使用OR關(guān)鍵字查詢?nèi)绻鄺l件查詢中的條件使用OR關(guān)鍵字連接,表示只需要符合所有條件中的一個(gè)條件,此記錄就會(huì)被返回。【實(shí)例7-8】從goods表中查詢type值為“糖類”或者“書(shū)籍”的記錄。SQL語(yǔ)句及其執(zhí)行結(jié)果如下:mysql>SELECT*FROMgoodsWHEREtype='糖類'ORtype='書(shū)籍';+++++++|id |type |name|price |num |add_time |+++++++|1|書(shū)籍 |西游記|50.40 |20 |2018-01-0113:40:40 ||2|糖類 |牛奶糖|7.50 |200 |2018-02-0213:40:40 ||3|糖類 |水果糖|2.50 |100 |NULL |+++++++3rowsinset(0.00sec)【提示】AND關(guān)鍵字可以使用符號(hào)“&&”代替;OR關(guān)鍵字可以使用符號(hào)“||”代替。3.使用IN關(guān)鍵字查詢使用IN關(guān)鍵字可以查詢字段值等于指定集合中任意一個(gè)值的記錄,語(yǔ)法形式如下:SELECT{*|col_list}FROMtable_nameWHEREcol_nameIN(value1,value2,……valuen);上述語(yǔ)句中,指定集合包含在括號(hào)中,值之間使用逗號(hào)隔開(kāi)?!緦?shí)例7-9】執(zhí)行SQL語(yǔ)句,查詢goods表中id值為1和3的記錄,結(jié)果如下:mysql>SELECT*FROMgoodsWHEREidIN(1,3);+++++++|id |type |name |price |num |add_time |+++++++|1|書(shū)籍 |西游記 |50.40 |20 |2018-01-0113:40:40 ||3|糖類 |水果糖 |2.50 |100 |NULL |+++++++2rowsinset(0.01sec)此類操作也可以使用OR關(guān)鍵字實(shí)現(xiàn),SQL語(yǔ)句如下。SELECT*FROMgoodsWHEREid=1ORid=7;【提示】OR關(guān)鍵字和IN關(guān)鍵字可以實(shí)現(xiàn)相同的功能,但I(xiàn)N關(guān)鍵字可以使查詢語(yǔ)句更加簡(jiǎn)潔,并且IN關(guān)鍵字的執(zhí)行速度比OR關(guān)鍵字快。另外,IN關(guān)鍵字還可以與NOT關(guān)鍵字配合使用,作用是查詢字段值不在指定集合中的記錄?!緦?shí)例7-10】執(zhí)行SQL語(yǔ)句,查詢goods表中id值不為1和3的記錄,結(jié)果如下:mysql>SELECT*FROMgoodsWHEREidNOTIN(1,3);+++++++|id |type |name|price |num |add_time |+++++++|2|糖類 |牛奶糖|7.50 |200 |2018-02-0213:40:40 ||4|服飾 |休閑西服|800.00 |NULL |2018-04-0413:40:40 ||5|飲品 |果汁|3.00 |70 |2018-05-0513:40:40 |+++++++3rowsinset(0.00sec)7.2.5查詢空值MySQL提供ISNULL關(guān)鍵字,用于查詢字段值為NULL的記錄,語(yǔ)法形式如下:SELECT{*|col_list}FROMtable_nameWHEREcol_nameISNULL;【實(shí)例7-11】執(zhí)行SQL語(yǔ)句,查詢goods表中num值為NULL的記錄,結(jié)果如下:mysql>SELECT*FROMgoodsWHEREnumISNULL;+++++++|id |type |name |price|num|add_time |+++++++|4|服飾 |休閑西服 |800.00|NULL|2018-04-0413:40:40 |+++++++1rowinset(0.02sec)ISNULL也可以和NOT關(guān)鍵字配合使用,用于查詢字段值不為NULL的記錄。【實(shí)例7-12】執(zhí)行SQL語(yǔ)句,查詢goods表中num值不為NULL的記錄,結(jié)果如下:mysql>SELECT*FROMgoodsWHEREnumISNOTNULL;+++++++|id |type |name |price |num |add_time |+++++++|1|書(shū)籍 |西游記 |50.40 |20 |2018-01-0113:40:40 ||2|糖類 |牛奶糖 |7.50 |200 |2018-02-0213:40:40 ||3|糖類 |水果糖 |2.50 |100 |NULL ||5|飲品 |果汁 |3.00 |70 |2018-05-0513:40:40 |+++++++4rowsinset(0.00sec)需要注意的是,如果某些字段值為NULL,在將這些字段與其他值進(jìn)行比較時(shí),就會(huì)返回不準(zhǔn)確的數(shù)據(jù)。【實(shí)例
7-13】執(zhí)行SQL語(yǔ)句,查詢goods表中num值不等于100的記錄,查詢結(jié)果如下:mysql>SELECT*FROMgoodsWHEREnum<>100;+++++++|id |type |name |price |num |add_time |+++++++|1|書(shū)籍 |西游記 |50.40 |20 |2018-01-0113:40:40 ||2|糖類 |牛奶糖 |7.50 |200 |2018-02-0213:40:40 ||5|飲品 |果汁 |3.00 |70 |2018-05-0513:40:40 |+++++++3rowsinset(0.00sec)按照平常的理解,字段值為NULL時(shí),也符合不等于100的條件,但是在MySQL中,值為NULL就表示該字段還沒(méi)有進(jìn)行任何的賦值操作,它的值是未知的,所以無(wú)法與其他類型的值進(jìn)行比較。7.2.6查詢結(jié)果不重復(fù)通過(guò)前面的學(xué)習(xí)可以知道,如果要查詢goods表中商品的種類,直接查詢表示“種類”的字段即可?!緦?shí)例7-14】執(zhí)行SQL語(yǔ)句,查詢goods表中字段type的值,結(jié)果如下。mysql>SELECTtypeFROMgoods;++|type |++|書(shū)籍 ||糖類 ||糖類 ||服飾 ||飲品 |++5rowsinset(0.00sec)可以看到查詢結(jié)果返回了5條記錄,其中有重復(fù)的值。為了更方便地分析商品種類,最好能將重復(fù)的值去掉。為此,MySQL提供了DISTINCT關(guān)鍵字,使查詢結(jié)果不重復(fù)。其語(yǔ)法形式如下:SELECTDISTINCTcol_listFROMtable_name;【實(shí)例7-15】執(zhí)行SQL語(yǔ)句,查詢goods表中字段type不重復(fù)的值,結(jié)果如下:mysql>SELECTDISTINCTtypeFROMgoods;++|type |++|書(shū)籍 ||糖類 ||服飾 ||飲品 |++4rowsinset(0.04sec)可以看到,此次查詢結(jié)果只返回了4條記錄的type值,且沒(méi)有重復(fù)值。7.2.7范圍查詢MySQL提供BETWEENAND關(guān)鍵字,用于查詢字段值在某個(gè)范圍內(nèi)的記錄,語(yǔ)法形式為:SELECT{*|col_list}FROMtable_nameWHEREcol_nameaBETWEENvalue1ANDvalue2;上述語(yǔ)句中,col_namea為要限定值范圍的字段,value1為開(kāi)始值,value2為結(jié)束值?!緦?shí)例7-16】執(zhí)行SQL語(yǔ)句,查詢goods表中price值為2.5到50的商品名稱和價(jià)格,結(jié)果如下:mysql>SELECTname,priceFROMgoodsWHEREpriceBETWEEN2.5AND50;+++|name |price |+++|牛奶糖 |7.50 ||水果糖 |2.50 ||果汁 |3.00 |+++3rowsinset(0.00sec)BETWEENAND關(guān)鍵字可以配合NOT關(guān)鍵字,用于查詢字段值不在某個(gè)范圍內(nèi)的記錄。【實(shí)例7-17】執(zhí)行SQL語(yǔ)句,查詢goods表中price值不在2.5和50之間的商品名稱和價(jià)格,結(jié)果如下:mysql>SELECTname,priceFROMgoodsWHEREpriceNOTBETWEEN2.5AND50;+++|name |price |+++|西游記 |50.40 ||休閑西服 |800.00 |+++2rowsinset(0.00sec)由實(shí)例7-16和實(shí)例7-17的查詢結(jié)果可以看出,使用BETWEENAND關(guān)鍵字進(jìn)行查詢,查詢結(jié)果包括范圍內(nèi)的所有值,也包括開(kāi)始值和結(jié)束值。使用BETWEENAND關(guān)鍵字和NOT關(guān)鍵字進(jìn)行查詢,查詢結(jié)果不包括開(kāi)始值和結(jié)束值。7.2.8字符匹配查詢使用LIKE關(guān)鍵字的查詢又稱為模糊查詢,通常用于查詢字段值包含某些字符的記錄,語(yǔ)法形式如下:SELECT{*|col_list}FROMtable_nameWHEREcol_nameaLIKEvalueb;上述語(yǔ)句中,valueb表示要匹配的字符。LIKE關(guān)鍵字一般與通配符“%”或者“_”配合使用,如果字段col_namea中的值包含valueb,此條記錄就會(huì)被返回。通配符可以放在字符前,也可以放在字符后,還可以同時(shí)放在字符前后。1.通配符“%”通配符“%”可以匹配任意長(zhǎng)度的字符,可以是0個(gè),也可以是1個(gè)或多個(gè)?!緦?shí)例7-18】執(zhí)行SQL語(yǔ)句,查詢goods表中name值以“果”開(kāi)頭的記錄,結(jié)果如下:mysql>SELECT*FROMgoodsWHEREnameLIKE'果%';+++++++|id |type|name |price |num |add_time |+++++++|5|飲品|果汁 |3.00 |70 |2018-05-0513:40:40 |+++++++1rowinset(0.00sec)執(zhí)行以下語(yǔ)句,可查詢goods表中name值以“糖”結(jié)尾的記錄。SELECT*FROMgoodsWHEREnameLIKE'%糖';執(zhí)行以下語(yǔ)句,可查詢goods表中name值包含“游”的記錄。SELECT*FROMgoodsWHEREnameLIKE'%游%';執(zhí)行以下語(yǔ)句,可查詢goods表中name值以“休”開(kāi)頭,以“服”結(jié)尾的記錄。SELECT*FROMgoodsWHEREnameLIKE'休%服';通過(guò)以上多個(gè)語(yǔ)句可以看出,通配符“%”可以出現(xiàn)在匹配字符的任意位置,并且可以匹配任意數(shù)目的字符。2.通配符“_”通配符“_”的使用方法與通配符“%”類似,都可以出現(xiàn)在匹配字符的任意位置,但通配符“_”只能匹配一個(gè)字符?!緦?shí)例7-19】執(zhí)行SQL語(yǔ)句,查詢goods表中name值以“西”開(kāi)頭,“西”后有兩個(gè)字符的記錄,結(jié)果如下所示。mysql>SELECT*FROMgoodsWHEREnameLIKE'西__';+++++++|id |type|name |price |num |add_time |+++++++|1|書(shū)籍|西游記 |50.40 |20 |2018-01-0113:40:40 |+++++++1rowinset(0.00sec)如果要查詢goods表中name值以“西”開(kāi)頭,“西”后有一個(gè)字符的記錄,則執(zhí)行以下語(yǔ)句即可。SELECT*FROMgoodsWHEREnameLIKE'西_';【提示】可以在表中插入一個(gè)name值為“西瓜”的記錄,試試查詢結(jié)果。7.2.9排序查詢使用前面的方法查詢到的結(jié)果是按照記錄在表中的默認(rèn)順序進(jìn)行排列的。如果需要將查詢結(jié)果按照指定的順序排列,可以使用ORDERBY關(guān)鍵字。語(yǔ)法形式如下:SELECT{*|col_list}FROMtable_nameORDERBYcol_namea[ASC|DESC];上述語(yǔ)句的意義是,按照字段col_namea對(duì)查詢記錄進(jìn)行排序,col_namea可以為一個(gè)或多個(gè)字段,當(dāng)有多個(gè)字段時(shí),各字段之間使用英文逗號(hào)隔開(kāi)。字段后的參數(shù)ASC代表按照升序進(jìn)行排序,DESC代表按照降序進(jìn)行排序,如果沒(méi)有ASC或者DESC,默認(rèn)按照升序排序。1.單字段排序在排序之前最好將有空值的記錄補(bǔ)充完整,否則,空值記錄將被排在最前面?!緦?shí)例7-20】執(zhí)行SQL語(yǔ)句,查詢goods表中id、name和add_time字段的數(shù)據(jù),并按照add_time字段值進(jìn)行排序,結(jié)果如下:mysql>SELECTid,name,add_timeFROMgoodsORDERBYadd_time;++++|id |name|add_time |++++|1|西游記|2018-01-0113:40:40 ||2|牛奶糖|2018-02-0213:40:40 ||4|休閑西服|2018-04-0413:40:40 ||5|果汁|2018-05-0513:40:40 ||3|水果糖|2018-06-0911:20:55 |++++5rowsinset(0.00sec)2.多字段排序有些情況下,可能需要使用多個(gè)字段作為排序條件對(duì)查詢結(jié)果進(jìn)行排序。為查看查詢結(jié)果,此處將第5條記錄的price值改為2.5(與第3條記錄值相同)。【實(shí)例7-21】執(zhí)行SQL語(yǔ)句,查詢goods表中所有記錄,并按照price和num字段值進(jìn)行排序,結(jié)果如下:mysql>SELECT*FROMgoodsORDERBYprice,num;+++++++|id |type|name|price |num |add_time |+++++++|5|飲品|果汁|2.50|70 |2018-05-0513:40:40 ||3|糖類|水果糖|2.50|100 |2018-06-0911:20:55 ||2|糖類|牛奶糖|7.50|200 |2018-02-0213:40:40 ||1|書(shū)籍|西游記|50.40|20 |2018-01-0113:40:40 ||4|服飾|休閑西服|800.00 |10 |2018-04-0413:40:40 |+++++++5rowsinset(0.00sec)由查詢結(jié)果可以看出,系統(tǒng)會(huì)首先按照price字段值進(jìn)行排序,對(duì)于price字段值相同的記錄,再按照num字段值進(jìn)行排序。3.降序排序如果需要對(duì)查詢結(jié)果進(jìn)行降序排序,可以使用DESC關(guān)鍵字?!緦?shí)例7-22】執(zhí)行SQL語(yǔ)句,將goods表中所有記錄查詢出來(lái),并按照price字段降序排序,結(jié)果如下:mysql>SELECT*FROMgoodsORDERBYpriceDESC;+++++++|id |type|name|price |num |add_time |+++++++|4|服飾|休閑西服|800.00 |10 |2018-04-0413:40:40 ||1|書(shū)籍|西游記|50.40 |20 |2018-01-0113:40:40 ||2|糖類|牛奶糖|7.50 |200 |2018-02-0213:40:40 ||3|糖類|水果糖|2.50 |100 |2018-06-0911:20:55 ||5|飲品|果汁|2.50 |70 |2018-05-0513:40:40 |+++++++5rowsinset(0.00sec)在按照多字段排序時(shí),也可以使用DESC關(guān)鍵字進(jìn)行降序排序?!緦?shí)例7-23】執(zhí)行SQL語(yǔ)句,查詢goods表中所有記錄,并按照price字段和num字段進(jìn)行排序,結(jié)果如下:mysql>SELECT*FROMgoodsORDERBYpriceDESC,num;+++++++|id |type|name|price |num |add_time |+++++++|4|服飾|休閑西服|800.00 |10 |2018-04-0413:40:40 ||1|書(shū)籍|西游記|50.40 |20 |2018-01-0113:40:40 ||2|糖類|牛奶糖|7.50 |200 |2018-02-0213:40:40 ||5|飲品|果汁|2.50 |70 |2018-05-0513:40:40 ||3|糖類|水果糖|2.50 |100 |2018-06-0911:20:55 |+++++++5rowsinset(0.00sec)由以上查詢結(jié)果可以看出,查詢結(jié)果按照price字段進(jìn)行了降序排序,而按照num字段進(jìn)行了升序排序。因此,如果需要按照多個(gè)字段進(jìn)行降序排序,必須在每個(gè)字段后加上DESC關(guān)鍵字。7.2.10限制查詢結(jié)果的數(shù)量實(shí)際應(yīng)用中,數(shù)據(jù)庫(kù)中的數(shù)據(jù)量通常是很大的,一般不會(huì)一次性將所有數(shù)據(jù)查詢出來(lái),此時(shí)就需要使用LIMIT關(guān)鍵字來(lái)限制查詢結(jié)果的數(shù)量。語(yǔ)法形式如下:SELECT{*|col_list}FROMtable_nameLIMIT[offset_start,]row_count;上述語(yǔ)句中,“offset_start”表示起始位置,用于指定查詢從哪一行開(kāi)始,如果不指定,默認(rèn)為0,從表的第一行記錄開(kāi)始查詢;row_count表示查詢出來(lái)的記錄條數(shù)。接下來(lái)通過(guò)實(shí)例了解一下不指定起始位置,直接限制查詢結(jié)果數(shù)量的情況?!緦?shí)例7-24】執(zhí)行SQL語(yǔ)句,將goods表中的前3條記錄查詢出來(lái),結(jié)果如下:mysql>SELECT*FROMgoodsLIMIT3;+++++++|id |type|name|price |num |add_time |+++++++|1|書(shū)籍|西游記|50.40 |20 |2018-01-0113:40:40 ||2|糖類|牛奶糖|7.50 |200 |2018-02-0213:40:40 ||3|糖類|水果糖|2.50 |100 |2018-06-0911:20:55 |+++++++3rowsinset(0.00sec)如果指定起始位置(從0開(kāi)始),則系統(tǒng)會(huì)從起始位置開(kāi)始查詢,返回總條數(shù)為顯示條數(shù)的記錄?!緦?shí)例7-25】執(zhí)行SQL語(yǔ)句,返回goods表中從第3條記錄開(kāi)始,總條數(shù)為3的記錄,結(jié)果如下:mysql>SELECT*FROMgoodsLIMIT2,3;+++++++|id |type|name|price |num |add_time |+++++++|3|糖類|水果糖|2.50 |100 |2018-06-0911:20:55 ||4|服飾|休閑西服|800.00 |10 |2018-04-0413:40:40 ||5|飲品|果汁|2.50 |70 |2018-05-0513:40:40 |+++++++3rowsinset(0.00sec)由查詢結(jié)果可以看出,當(dāng)起始位置為“2”時(shí),MySQL會(huì)從表的第3條記錄開(kāi)始查詢。7.2.11使用圖形化工具篩選數(shù)據(jù)使用NavicatforMySQL也可以實(shí)現(xiàn)在查詢數(shù)據(jù)時(shí)按照一定條件進(jìn)行篩選,具體步驟如下:步驟
1進(jìn)入NavicatforMySQL后,選擇要操作的數(shù)據(jù)庫(kù),然后選中需要操作的表,此處為goods,單擊“打開(kāi)表”按鈕。步驟2單擊“篩選”按鈕,打開(kāi)篩選編輯區(qū)。步驟
3單擊篩選編輯區(qū)左上角的“添加”文字,編輯區(qū)會(huì)添加一條以表的第一個(gè)字段為主體的欄目,此處為id,單擊“id”文字,打開(kāi)字段列表,用戶可根據(jù)實(shí)際需求選擇字段?!ㄔ斠?jiàn)教材)【學(xué)生】聆聽(tīng)、思考、記錄通過(guò)教師的講解和演示,使學(xué)生了解基本查詢語(yǔ)句和簡(jiǎn)單數(shù)據(jù)記錄查詢的相關(guān)知識(shí)第二節(jié)課問(wèn)題導(dǎo)入(5min)【教師】提出以下問(wèn)題:在數(shù)據(jù)庫(kù)中,通常需要進(jìn)行一些數(shù)據(jù)匯總操作,如何對(duì)這些數(shù)據(jù)進(jìn)行匯總呢?【學(xué)生】思考、舉手回答通過(guò)問(wèn)題導(dǎo)入,引導(dǎo)學(xué)生主動(dòng)思考,激發(fā)學(xué)生的學(xué)習(xí)興趣傳授新知(20min)【教師】通過(guò)學(xué)生的回答引入新知,介紹聚合函數(shù)和分組數(shù)據(jù)記錄查詢的相關(guān)知識(shí)7.3聚合函數(shù)和分組數(shù)據(jù)記錄查詢?cè)跀?shù)據(jù)庫(kù)中,通常需要進(jìn)行一些數(shù)據(jù)匯總操作。比如,要統(tǒng)計(jì)匯總商品種類或者統(tǒng)計(jì)整個(gè)公司的員工數(shù)等,此時(shí)就用到了聚合函數(shù)。MySQL所支持的聚合函數(shù)一共有以下5種。COUNT()函數(shù):計(jì)算表中記錄的條數(shù)。SUM()函數(shù):計(jì)算字段值的總和。AVG()函數(shù):計(jì)算字段值的平均值。MAX()函數(shù):查詢表中字段值的最大值。MIN()函數(shù):查詢表中字段值的最小值。實(shí)際應(yīng)用中,聚合函數(shù)通常與分組查詢一起使用。分組查詢就是按照某個(gè)字段對(duì)數(shù)據(jù)記錄進(jìn)行分組,比如前面用到的goods表,可以按照商品類別對(duì)記錄進(jìn)行分組,然后使用聚合函數(shù)統(tǒng)計(jì)每個(gè)類別下的商品數(shù)量。7.3.1使用聚合函數(shù)查詢使用聚合函數(shù)查詢的基本語(yǔ)法形式如下:SELECTfunction(*|col_num)FROMtable_nameWHERECONDITION本節(jié)依然以db_shop數(shù)據(jù)庫(kù)中的goods表為例進(jìn)行操作,在操作之前,先執(zhí)行以下語(yǔ)句,向數(shù)據(jù)表中追加5條記錄。INSERTINTOgoods(id,type,name,price,num,add_time)VALUES(6,'書(shū)籍','論語(yǔ)',109,50,'2018-01-0313:40:40'),(7,'水果','西瓜',1.5,null,'2018-02-0513:40:40'),(8,'水果','蘋(píng)果',3,100,'2018-03-0513:40:40'),(9,'服飾','牛仔褲',120,10,'2018-05-0413:40:40'),(10,'書(shū)籍','紅樓夢(mèng)',50.5,15,'2018-05-0613:40:40');1.COUNT()函數(shù)COUNT()函數(shù)用于統(tǒng)計(jì)數(shù)據(jù)記錄條數(shù),用于返回表中記錄的條數(shù),或者符合特定條件的記錄條數(shù)。其使用方法有以下兩種:COUNT(*):計(jì)算表中總的記錄數(shù),不管表字段中是否包含NULL值。COUNT(col_name):計(jì)算表中指定字段的記錄數(shù),在具體統(tǒng)計(jì)時(shí)將忽略NULL值。下面通過(guò)具體實(shí)例說(shuō)明COUNT()函數(shù)的應(yīng)用。【實(shí)例7-26】執(zhí)行SQL語(yǔ)句,查詢goods表中總的記錄條數(shù),執(zhí)行結(jié)果如下。mysql>SELECTCOUNT(*)ASgoods_numFROMgoods;++|goods_num |++|10 |++1rowinset(0.06sec)由查詢結(jié)果可以看出,COUNT(*)函數(shù)返回goods表中總的記錄條數(shù),返回的總數(shù)名稱為goods_num。【提示】上述語(yǔ)句中使用AS關(guān)鍵字為字段取別名為goods_num,使得查詢結(jié)果簡(jiǎn)單明了,AS關(guān)鍵字可省略。使用AS關(guān)鍵字不僅可以為字段取別名,還可為表取別名,其使用非常靈活。后面將多處用到該關(guān)鍵字,讀者可留意其用法?!緦?shí)例7-27】執(zhí)行SQL語(yǔ)句,查詢goods表中有庫(kù)存(num值不為NULL)的記錄條數(shù),執(zhí)行結(jié)果如下。mysql>SELECTCOUNT(num)ASgoods_numFROMgoods;++|goods_num |++|9 |++1rowinset(0.01sec)由查詢結(jié)果可以看出,表中有9條記錄還有庫(kù)存,num值為空的記錄被忽略。2.SUM()函數(shù)SUM()函數(shù)是一個(gè)求總和的函數(shù),用于返回指定字段值的總和,或符合特定條件的指定字段值總和,在具體計(jì)算時(shí)將忽略NULL值。其使用方法如下:SUM(col_name)下面通過(guò)具體實(shí)例說(shuō)明SUM()函數(shù)的應(yīng)用。【實(shí)例7-28】執(zhí)行SQL語(yǔ)句,查詢goods表中商品庫(kù)存的總和,執(zhí)行結(jié)果如下。mysql>SELECTSUM(num)goods_numFROMgoods;++|goods_num|++|575|++1rowinset(0.04sec)3.AVG()函數(shù)AVG()函數(shù)通過(guò)計(jì)算返回的行數(shù)和每一行數(shù)據(jù)的和,得到指定列數(shù)據(jù)的平均值,在具體計(jì)算時(shí)將忽略NULL值。AVG()函數(shù)與GROUPBY一起使用,可以計(jì)算每個(gè)分組的平均值。其使用方式如下:AVG(col_name)【實(shí)例7-29】執(zhí)行SQL語(yǔ)句,查詢goods表中每個(gè)商品類別的平均價(jià)格,執(zhí)行結(jié)果如下。mysql>SELECTtype,AVG(price)FROMgoodsGROUPBYtype;+++|type|AVG(price) |+++|書(shū)籍|69.966667 ||服飾|460.000000 ||水果|2.250000 ||糖類|5.000000 ||飲品|2.500000 |+++5rowsinset(0.03sec)GROUPBY用于分組查詢,7.3.2節(jié)中將會(huì)詳細(xì)介紹其用法。4.MAX()函數(shù)和MIN()函數(shù)MAX()函數(shù)和MIN()函數(shù)是用于求最大值和最小值的函數(shù),可返回指定字段中的最大值和最小值,或者符合特定條件的指定字段值中的最大值和最小值。其使用方法如下:MAX(col_name):該方式可以實(shí)現(xiàn)計(jì)算指定字段值中的最大值,在具體計(jì)算時(shí)將忽略NULL值。MIN(col_name):該方式可以實(shí)現(xiàn)計(jì)算指定字段值中的最小值,在具體計(jì)算時(shí)將忽略NULL值。下面通過(guò)具體實(shí)例說(shuō)明這兩個(gè)函數(shù)的應(yīng)用。【實(shí)例7-30】執(zhí)行SQL語(yǔ)句,查詢goods表中商品的最高價(jià)格和最低價(jià)格,執(zhí)行結(jié)果如下。mysql>SELECTMAX(price)maxpri,MIN(price)minpriFROMgoods;+++|maxpri |minpri |+++|800.00 |1.50 |+++1rowinset(0.04sec)由查詢結(jié)果可以看出,goods表中商品的最高價(jià)格和最低價(jià)格分別是800和1.5。7.3.2分組查詢分組查詢是將查詢結(jié)果按照某個(gè)或多個(gè)字段進(jìn)行分組,MySQL使用GROUPBY語(yǔ)句對(duì)數(shù)據(jù)進(jìn)行分組。GROUPBY從字面上理解就是“根據(jù)(BY)一定的規(guī)則進(jìn)行分組(GROUP)”。它的工作原理是按照一定的規(guī)則將一個(gè)數(shù)據(jù)集合劃分成若干個(gè)小的區(qū)域,然后針對(duì)這些區(qū)域的數(shù)據(jù)進(jìn)行處理,語(yǔ)法形式如下:SELECT{*|col_list}aggregate_funcFROMtable_nameGROUPBYcol_namea[HAVINGcondition];上述語(yǔ)句中,aggregate_func表示聚合函數(shù),GROUPBY關(guān)鍵字通常與聚合函數(shù)一起使用;col_namea表示按照字段col_namea對(duì)數(shù)據(jù)進(jìn)行分組。1.簡(jiǎn)單分組查詢將GROUPBY關(guān)鍵字與聚合函數(shù)COUNT()一起使用,可以查詢每組的數(shù)量?!緦?shí)例7-31】執(zhí)行SQL語(yǔ)句,將goods表中的記錄按照type字段(商品類別)進(jìn)行分組,并統(tǒng)計(jì)每組的數(shù)量,結(jié)果如下:mysql>SELECTtype,count(*)FROMgoodsGROUPBYtype;+++|type|count(*) |+++|書(shū)籍|3 ||服飾|2 ||水果|2 ||糖類|2 ||飲品|1 |+++5rowsinset(0.02sec)如果需要將每種類型中包含的商品名稱顯示出來(lái),可以使用group_concat()函數(shù)。【實(shí)例
7-32】執(zhí)行SQL語(yǔ)句,將goods表中的記錄按照type字段進(jìn)行分組,并顯示每組中的商品名稱,結(jié)果如下:mysql>SELECTtype,group_concat(name)FROMgoodsGROUPBYtype;+++|type|group_concat(name) |+++|書(shū)籍|西游記,論語(yǔ),紅樓夢(mèng) ||服飾|休閑西服,牛仔褲 ||水果|西瓜,蘋(píng)果 ||糖類|牛奶糖,水果糖 ||飲品|果汁 |+++5rowsinset(0.00sec)2.使用HAVING過(guò)濾分組后數(shù)據(jù)GROUPBY和HAVING一起使用,可以指定顯示記錄所需滿足的條件,只有滿足條件的分組才會(huì)被顯示?!緦?shí)例7-33】執(zhí)行SQL語(yǔ)句,將goods表中的記錄按照type字段分組并統(tǒng)計(jì)每組的數(shù)量,然后只取商品數(shù)量大于1的分組,結(jié)果如下:mysql>SELECTtype,count(*)FROMgoodsGROUPBYtypeHAVINGCOUNT(*)>1;+++|type|count(*) |+++|書(shū)籍|3 ||服飾|2 ||水果|2 ||糖類|2 |+++4rowsinset(0.06sec)?【教師】隨機(jī)邀請(qǐng)學(xué)生回答以下問(wèn)題:WHERE子句和HAVING子句都具有按照條件篩選數(shù)據(jù)的功能,兩者的區(qū)別有哪些??【學(xué)生】聆聽(tīng)、思考、回答?【教師】總結(jié)學(xué)生的回答WHERE子句和HAVING子句都具有按照條件篩選數(shù)據(jù)的功能,
溫馨提示
- 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í)班主任的工作感悟與總結(jié)
- 做好風(fēng)險(xiǎn)控制保持財(cái)務(wù)穩(wěn)定
- 營(yíng)造和諧教育氛圍的工作總結(jié)
- 紡織行業(yè)的會(huì)計(jì)工作總結(jié)
- 《希臘旅游資源介紹》課件
- 廣西賀州地區(qū)2022-2023學(xué)年六年級(jí)上學(xué)期英語(yǔ)期末試卷
- 2025年四川省八省聯(lián)考高考地理模擬試卷
- 《腹股溝疝手術(shù)配合》課件
- 2022年湖南省婁底市公開(kāi)招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 2024年云南省曲靖市公開(kāi)招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- ISO 56001-2024《創(chuàng)新管理體系-要求》專業(yè)解讀與應(yīng)用實(shí)踐指導(dǎo)材料之20:“7支持-7.3意識(shí)+7.4溝通”(雷澤佳編制-2025B0)
- 期末素養(yǎng)提升(試題)-2024-2025學(xué)年語(yǔ)文二年級(jí)上冊(cè)
- 西京學(xué)院《數(shù)據(jù)挖掘B》2023-2024學(xué)年第一學(xué)期期末試卷
- 2021年江蘇南京二十九中特長(zhǎng)生考試數(shù)學(xué)試卷真題(含答案詳解)
- 選調(diào)生培訓(xùn)心得體會(huì)集合6篇
- 北京市朝陽(yáng)區(qū)2023-2024學(xué)年九年級(jí)上學(xué)期期末物理試卷
- 全國(guó)賽課一等獎(jiǎng)初中統(tǒng)編版七年級(jí)道德與法治上冊(cè)《正確對(duì)待順境和逆境》教學(xué)設(shè)計(jì)
- 統(tǒng)編版(2024版)道德與法治七年級(jí)上冊(cè)期末質(zhì)量監(jiān)測(cè)試卷 3套(含答案)
- 2024年01月11073法律文書(shū)期末試題答案
- 體系工程師年終總結(jié)
- 臺(tái)灣民法繼承編
評(píng)論
0/150
提交評(píng)論