




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
7單表數(shù)據(jù)記錄查詢第章7.1基本查詢語句單表查詢是指從一張數(shù)據(jù)表中查詢所需要的數(shù)據(jù)。在MySQL中查詢數(shù)據(jù)的基本語句是SELECT語句,其基本語法格式如下:SELECT {*|<字段列表>} [ FROM<表1>,<表2>… [WHERE<表達式> [GROUPBY<groupbydefinition>] [HAVING<expression>[{<operator><expression>}…]] [ORDERBY<orderbydefinition>] [LIMIT[<offset>,]<rowcount>] ];7.2簡單數(shù)據(jù)記錄查詢簡單數(shù)據(jù)記錄查詢主要包括:查詢所有字段、查詢指定字段、查詢指定記錄、多條件查詢、排序查詢等。本節(jié)將以第5章創(chuàng)建的goods表為操作對象,講解簡單數(shù)據(jù)記錄查詢的具體實現(xiàn)方法,如果表內(nèi)還沒有數(shù)據(jù),執(zhí)行以下語句在其中插入數(shù)據(jù)。INSERTINTOgoods(id,type,name,price,num,add_time)VALUES(1,'書籍','西游記',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');查詢所有字段數(shù)據(jù),是指從一張表中檢索出所有記錄,查詢方式有兩種,一種是使用通配符“*”,另一種是列出所有字段名,語法形式如下:SELECT{*|col_list}FROMtable_name;【實例7-1】使用通配符“*”查詢goods表中所有數(shù)據(jù),SQL語句及其執(zhí)行結果如下。mysql>SELECT*FROMgoods;+----+--------+--------------+--------------+--------------+-----------------------------+|id|type |name |price |num |add_time |+----+--------+--------------+--------------+--------------+-----------------------------+|1|書籍 |西游記 |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)通過在SELECT關鍵字后面列出所有字段名,也可以查詢所有列數(shù)據(jù),SQL語句如下,其查詢結果與實例7-1的結果相同。SELECTid,type,name,price,num,add_timeFROMgoods;
知識庫一般使用通配符查詢表中所有字段數(shù)據(jù);而使用列出字段名的方式查詢部分字段數(shù)據(jù)。使用SELECT關鍵字也可以查詢指定字段的數(shù)據(jù),語法形式如下:SELECTcol_name1[,col_name2,……,col_namen]FROMtable_name;【實例7-2】從goods表中查詢單個字段。mysql>SELECTnameFROMgoods;+--------------+|name|+--------------+|休閑西服||果汁||水果糖||牛奶糖||西游記|+--------------+5rowsinset(0.00sec)【實例7-3】從goods表中查詢多個字段。mysql>SELECTid,nameFROMgoods;+----+--------------+|id|name|+----+--------------+|4|休閑西服||5|果汁||3|水果糖||2|牛奶糖||1|西游記|+----+--------------+5rowsinset(0.00sec)當用戶需要查詢數(shù)據(jù)庫中符合一定條件的數(shù)據(jù)時,可以使用WHERE子句對表中的記錄進行篩選,語法形式如下:SELECT{*|col_list}FROMtable_nameWHEREcondition;WHERE子句中可以使用多種條件判斷符,如表7-1所示。表7-1WHERE子句中可用的條件判斷符條件判斷符說
明=相
等<
小
于>
大
于<>(!=)不相等<=小于或者等于>=大于或者等于注:“<>”和“!=”功能相同。使用“=”符號查詢1【實例7-4】從goods表中查詢id值為3的記錄。SQL語句及其執(zhí)行結果如下:mysql>SELECT*FROMgoodsWHEREid=3;+----+----------+-----------+----------+----------+-----------------+|id|type |name|price |num |add_time|+----+----------+-----------+----------+----------+-----------------+|3|糖類 |水果糖|2.50 |100 |NULL |+----+----------+-----------+----------+----------+-----------------+1rowinset(0.06sec)【實例7-5】從goods表中查詢type值為“糖類”的記錄。SQL語句及其執(zhí)行結果如下: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)使用“>=”符號查詢2【實例7-6】從goods表中查詢num值大于等于100的記錄。SQL語句及其執(zhí)行結果如下: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)使用AND關鍵字查詢1MySQL支持多條件查詢,如果條件之間使用AND關鍵字連接,那么只有符合所有條件的記錄才會被返回?!緦嵗?-7】從goods表中查詢price值大于50,并且id值大于3的記錄。SQL語句及其執(zhí)行結果如下:mysql>SELECT*FROMgoodsWHEREprice>50ANDid>3;+----+----------+-----------------+----------+------------+-----------------------------+|id|type|name|price|num|add_time |+----+----------+-----------------+----------+------------+-----------------------------+|4|服飾|休閑西服|800.00|NULL|2018-04-0413:40:40|+----+----------+-----------------+----------+------------+-----------------------------+1rowinset(0.06sec)使用OR關鍵字查詢2如果多條件查詢中的條件使用OR關鍵字連接,表示只需要符合所有條件中的一個條件,此記錄就會被返回?!緦嵗?-8】從goods表中查詢type值為“糖類”或者“書籍”的記錄。SQL語句及其執(zhí)行結果如下:mysql>SELECT*FROMgoodsWHEREtype='糖類'ORtype='書籍';+----+----------+-----------+----------+----------+----------------------------+|id|type |name|price |num |add_time |+----+----------+-----------+----------+----------+----------------------------+|1|書籍|西游記|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關鍵字可以使用符號“&&”代替;OR關鍵字可以使用符號“||”代替。使用IN關鍵字查詢3使用IN關鍵字可以查詢字段值等于指定集合中任意一個值的記錄,語法形式如下:【實例7-9】執(zhí)行SQL語句,查詢goods表中id值為1和3的記錄,結果如下:mysql>SELECT*FROMgoodsWHEREidIN(1,3);+----+----------+-----------+----------+----------+-----------------------------+|id|type |name |price |num |add_time |+----+----------+-----------+----------+----------+-----------------------------+|1|書籍 |西游記|50.40 |20 |2018-01-0113:40:40||3|糖類 |水果糖|2.50 |100 |NULL |+----+----------+-----------+----------+----------+-----------------------------+2rowsinset(0.01sec)SELECT{*|col_list}FROMtable_nameWHEREcol_nameIN(value1,value2,……valuen);SELECT*FROMgoodsWHEREid=1ORid=7;使用IN關鍵字查詢3另外,IN關鍵字還可以與NOT關鍵字配合使用,作用是查詢字段值不在指定集合中的記錄?!緦嵗?-10】執(zhí)行SQL語句,查詢goods表中id值不為1和3的記錄,結果如下: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)MySQL提供ISNULL關鍵字,用于查詢字段值為NULL的記錄,語法形式如下:SELECT{*|col_list}FROMtable_nameWHEREcol_nameISNULL;【實例7-11】執(zhí)行SQL語句,查詢goods表中num值為NULL的記錄,結果如下:mysql>SELECT*FROMgoodsWHEREnumISNULL;+----+----------+-----------------+----------+--------+----------------------------+|id|type|name|price|num|add_time |+----+----------+-----------------+----------+--------+-----------------------------+|4|服飾|休閑西服|800.00|NULL|2018-04-0413:40:40|+----+----------+-----------------+----------+--------+-----------------------------+1rowinset(0.02sec)ISNULL也可以和NOT關鍵字配合使用,用于查詢字段值不為NULL的記錄?!緦嵗?-12】執(zhí)行SQL語句,查詢goods表中num值不為NULL的記錄,結果如下:mysql>SELECT*FROMgoodsWHEREnumISNOTNULL;+----+----------+-----------+----------+----------+-----------------------------+|id|type|name|price |num |add_time |+----+----------+-----------+----------+----------+-----------------------------+|1|書籍|西游記|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,在將這些字段與其他值進行比較時,就會返回不準確的數(shù)據(jù)?!緦嵗?-13】執(zhí)行SQL語句,查詢goods表中num值不等于100的記錄,查詢結果如下:mysql>SELECT*FROMgoodsWHEREnum<>100;+----+--------+----------+------------+----------+----------------------------------------+|id|type|name |price |num |add_time |+----+--------+----------+------------+----------+----------------------------------------+|1|書籍 |西游記 |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)通過前面的學習可以知道,如果要查詢goods表中商品的種類,直接查詢表示“種類”的字段即可?!緦嵗?-14】執(zhí)行SQL語句,查詢goods表中字段type的值,結果如下。mysql>SELECTtypeFROMgoods;+----------+|type |+----------+|書籍 ||糖類 ||糖類 ||服飾 ||飲品 |+----------+5rowsinset(0.00sec)MySQL提供了DISTINCT關鍵字,使查詢結果不重復。其語法形式如下:SELECTDISTINCTcol_listFROMtable_name;【實例7-15】執(zhí)行SQL語句,查詢goods表中字段type不重復的值,結果如下:mysql>SELECTDISTINCTtypeFROMgoods;+----------+|type |+----------+|書籍 ||糖類 ||服飾 ||飲品 |+----------+4rowsinset(0.04sec)MySQL提供BETWEENAND關鍵字,用于查詢字段值在某個范圍內(nèi)的記錄,語法形式為:【實例7-16】執(zhí)行SQL語句,查詢goods表中price值為2.5到50的商品名稱和價格,結果如下:mysql>SELECTname,priceFROMgoodsWHEREpriceBETWEEN2.5AND50;+----------+----------+|name |price |+----------+----------+|牛奶糖 |7.50 ||水果糖 |2.50 ||果汁 |3.00 |+----------+----------+3rowsinset(0.00sec)【實例7-17】執(zhí)行SQL語句,查詢goods表中price值不在2.5和50之間的商品名稱和價格,結果如下:mysql>SELECTname,priceFROMgoodsWHEREpriceNOTBETWEEN2.5AND50;+----------------+----------+|name |price |+----------------+----------+|西游記 |50.40 ||休閑西服 |800.00 |+----------------+----------+2rowsinset(0.00sec)SELECT{*|col_list}FROMtable_nameWHEREcol_nameaBETWEENvalue1ANDvalue2;使用LIKE關鍵字的查詢又稱為模糊查詢,通常用于查詢字段值包含某些字符的記錄,語法形式如下:SELECT{*|col_list}FROMtable_nameWHEREcol_nameaLIKEvalueb;通配符“%”1通配符“%”可以匹配任意長度的字符,可以是0個,也可以是1個或多個。【實例7-18】執(zhí)行SQL語句,查詢goods表中name值以“果”開頭的記錄,結果如下:mysql>SELECT*FROMgoodsWHEREnameLIKE'果%';+----+--------+-------+----------+----------+-------------------------------+|id|type|name|price|num|add_time |+----+--------+-------+----------+----------+-------------------------------+|5|飲品|果汁|3.00|70|2018-05-0513:40:40 |+----+--------+-------+----------+----------+-------------------------------+1rowinset(0.00sec)執(zhí)行以下語句,可查詢goods表中name值以“糖”結尾的記錄。SELECT*FROMgoodsWHEREnameLIKE'%糖';通配符“%”1執(zhí)行以下語句,可查詢goods表中name值包含“游”的記錄。SELECT*FROMgoodsWHEREnameLIKE'%游%';執(zhí)行以下語句,可查詢goods表中name值以“休”開頭,以“服”結尾的記錄。SELECT*FROMgoodsWHEREnameLIKE'休%服';通過以上多個語句可以看出,通配符“%”可以出現(xiàn)在匹配字符的任意位置,并且可以匹配任意數(shù)目的字符。使用LIKE關鍵字的查詢又稱為模糊查詢,通常用于查詢字段值包含某些字符的記錄,語法形式如下:SELECT{*|col_list}FROMtable_nameWHEREcol_nameaLIKEvalueb;通配符“_”2通配符“_”的使用方法與通配符“%”類似,都可以出現(xiàn)在匹配字符的任意位置,但通配符“_”只能匹配一個字符?!緦嵗?-19】執(zhí)行SQL語句,查詢goods表中name值以“西”開頭,“西”后有兩個字符的記錄,結果如下所示。mysql>SELECT*FROMgoodsWHEREnameLIKE'西__';+----+--------+-------------+----------+----------+-----------------------------+|id|type|name |price |num |add_time |+----+--------+-------------+----------+----------+-----------------------------+|1|書籍|西游記 |50.40 |20 |2018-01-0113:40:40|+----+--------+-------------+----------+----------+-----------------------------+1rowinset(0.00sec)如果要查詢goods表中name值以“西”開頭,“西”后有一個字符的記錄,則執(zhí)行以下語句即可。SELECT*FROMgoodsWHEREnameLIKE'西_';使用前面的方法查詢到的結果是按照記錄在表中的默認順序進行排列的。如果需要將查詢結果按照指定的順序排列,可以使用ORDERBY關鍵字。語法形式如下:SELECT{*|col_list}FROMtable_nameORDERBYcol_namea[ASC|DESC];單字段排序1在排序之前最好將有空值的記錄補充完整,否則,空值記錄將被排在最前面?!緦嵗?-20】執(zhí)行SQL語句,查詢goods表中id、name和add_time字段的數(shù)據(jù),并按照add_time字段值進行排序,結果如下: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有些情況下,可能需要使用多個字段作為排序條件對查詢結果進行排序。為查看查詢結果,此處將第5條記錄的price值改為2.5(與第3條記錄值相同)。【實例7-21】執(zhí)行SQL語句,查詢goods表中所有記錄,并按照price和num字段值進行排序,結果如下: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|書籍|西游記|50.40|20 |2018-01-0113:40:40 ||4|服飾|休閑西服|800.00 |10 |2018-04-0413:40:40 |+----+--------+-------------+----------+----------+-----------------------------+5rowsinset(0.00sec)降序排序3如果需要對查詢結果進行降序排序,可以使用DESC關鍵字?!緦嵗?-22】執(zhí)行SQL語句,將goods表中所有記錄查詢出來,并按照price字段降序排序,結果如下:mysql>SELECT*FROMgoodsORDERBYpriceDESC;+----+--------+--------------+---------+----------+-----------------------------+|id|type|name|price |num |add_time |+----+--------+--------------+---------+----------+-----------------------------+|4|服飾|休閑西服|800.00|10 |2018-04-0413:40:40||1|書籍|西游記|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)降序排序3在按照多字段排序時,也可以使用DESC關鍵字進行降序排序。【實例7-23】執(zhí)行SQL語句,查詢goods表中所有記錄,并按照price字段和num字段進行排序,結果如下:mysql>SELECT*FROMgoodsORDERBYpriceDESC,num;+----+--------+--------------+---------+----------+-----------------------------+|id|type|name|price |num |add_time |+----+--------+--------------+---------+----------+-----------------------------+|4|服飾|休閑西服|800.00|10 |2018-04-0413:40:40||1|書籍|西游記|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)實際應用中,數(shù)據(jù)庫中的數(shù)據(jù)量通常是很大的,一般不會一次性將所有數(shù)據(jù)查詢出來,此時就需要使用LIMIT關鍵字來限制查詢結果的數(shù)量。語法形式如下:SELECT{*|col_list}FROMtable_nameLIMIT[offset_start,]row_count;【實例7-24】執(zhí)行SQL語句,將goods表中的前3條記錄查詢出來,結果如下:mysql>SELECT*FROMgoodsLIMIT3;+----+--------+-----------+------------+----------+-----------------------------+|id|type|name|price |num |add_time |+----+--------+-----------+------------+----------+-----------------------------+|1|書籍|西游記|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開始),則系統(tǒng)會從起始位置開始查詢,返回總條數(shù)為顯示條數(shù)的記錄?!緦嵗?-25】執(zhí)行SQL語句,返回goods表中從第3條記錄開始,總條數(shù)為3的記錄,結果如下: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)步驟1
進入NavicatforMySQL后,選擇要操作的數(shù)據(jù)庫,然后選中需要操作的表,此處為goods,單擊“打開表”按鈕。步驟2
單擊“篩選”按鈕,打開篩選編輯區(qū),如圖7-1所示。圖7-1打開篩選編輯區(qū)步驟3
單擊篩選編輯區(qū)左上角的“添加”文字,編輯區(qū)會添加一條以表的第一個字段為主體的欄目,此處為id,單擊“id”文字,打開字段列表,用戶可根據(jù)實際需求選擇字段,如圖7-2所示。圖7-2添加篩選欄目步驟4
單擊篩選欄目中的“等于”文字,打開關鍵字列表,列表中包括where子句中常用的關鍵字,如不等于、小于和大于等,如圖7-3所示。圖7-3打開關鍵字列表步驟5
單擊篩選欄目中的“<?>”文字,打開輸入框,在輸入框中填寫關鍵字后的值,并單擊“確定”按鈕,如圖7-4所示。圖7-4填寫值步驟6
再次單擊“添加”按鈕,可添加另外的篩選條件,參照以上步驟設置第二個篩選條件,然后單擊“and”按鈕,選擇兩個篩選條件之間的關系,如圖7-5所示。圖7-5選擇篩選關系步驟7
單擊“上移”或“下移”按鈕可以調(diào)整篩選條件的順序,如圖7-6所示。圖7-6調(diào)整篩選條件的順序步驟8
設置完成所有的篩選條件后,單擊“應用”按鈕,即可執(zhí)行查詢,查詢結果會在篩選編輯區(qū)下方顯示,如圖7-7所示。圖7-7執(zhí)行查詢7.3聚合函數(shù)和分組數(shù)據(jù)記錄查詢在數(shù)據(jù)庫中,通常需要進行一些數(shù)據(jù)匯總操作。比如,要統(tǒng)計匯總商品種類或者統(tǒng)計整個公司的員工數(shù)等,此時就用到了聚合函數(shù)。MySQL所支持的聚合函數(shù)一共有以下5種。實際應用中,聚合函數(shù)通常與分組查詢一起使用。分組查詢就是按照某個字段對數(shù)據(jù)記錄進行分組,比如前面用到的goods表,可以按照商品類別對記錄進行分組,然后使用聚合函數(shù)統(tǒng)計每個類別下的商品數(shù)量。COUNT()函數(shù):計算表中記錄的條數(shù)。SUM()函數(shù):計算字段值的總和。AVG()函數(shù):計算字段值的平均值。MAX()函數(shù):查詢表中字段值的最大值。MIN()函數(shù):查詢表中字段值的最小值。使用聚合函數(shù)查詢的基本語法形式如下:SELECTfunction(*|col_num)FROMtable_nameWHERECONDITION本節(jié)依然以db_shop數(shù)據(jù)庫中的goods表為例進行操作,在操作之前,先執(zhí)行以下語句,向數(shù)據(jù)表中追加5條記錄。INSERTINTOgoods(id,type,name,price,num,add_time)VALUES(6,'書籍','論語',109,50,'2018-01-0313:40:40'),(7,'水果','西瓜',1.5,null,'2018-02-0513:40:40'),(8,'水果','蘋果',3,100,'2018-03-0513:40:40'),(9,'服飾','牛仔褲',120,10,'2018-05-0413:40:40'),(10,'書籍','紅樓夢',50.5,15,'2018-05-0613:40:40');COUNT()函數(shù)1COUNT()函數(shù)用于統(tǒng)計數(shù)據(jù)記錄條數(shù),用于返回表中記錄的條數(shù),或者符合特定條件的記錄條數(shù)。COUNT(*):計算表中總的記錄數(shù),不管表字段中是否包含NULL值。COUNT(col_name):計算表中指定字段的記錄數(shù),在具體統(tǒng)計時將忽略NULL值?!緦嵗?-26】執(zhí)行SQL語句,查詢goods表中總的記錄條數(shù),執(zhí)行結果如下。mysql>SELECTCOUNT(*)ASgoods_numFROMgoods;+-------------------------+|goods_num |+-------------------------+|10 |+-------------------------+1rowinset(0.06sec)
提示上述語句中使用AS關鍵字為字段取別名為goods_num,使得查詢結果簡單明了,AS關鍵字可省略。使用AS關鍵字不僅可以為字段取別名,還可為表取別名,其使用非常靈活。COUNT()函數(shù)1【實例7-27】執(zhí)行SQL語句,查詢goods表中有庫存(num值不為NULL)的記錄條數(shù),執(zhí)行結果如下。mysql>SELECTCOUNT(num)ASgoods_numFROMgoods;+----------------+|goods_num|+----------------+|9 |+----------------+1rowinset(0.01sec)SUM()函數(shù)2SUM()函數(shù)是一個求總和的函數(shù),用于返回指定字段值的總和,或符合特定條件的指定字段值總和,在具體計算時將忽略NULL值。其使用方法如下:【實例7-28】執(zhí)行SQL語句,查詢goods表中商品庫存的總和,執(zhí)行結果如下。mysql>SELECTSUM(num)goods_numFROMgoods;+-----------------+|goods_num|+-----------------+|575 |+-----------------+1rowinset(0.04sec)SUM(col_name)AVG()函數(shù)3AVG()函數(shù)通過計算返回的行數(shù)和每一行數(shù)據(jù)的和,得到指定列數(shù)據(jù)的平均值,在具體計算時將忽略NULL值。AVG()函數(shù)與GROUPBY一起使用,可以計算每個分組的平均值。其使用方式如下:【實例7-29】執(zhí)行SQL語句,查詢goods表中每個商品類別的平均價格,執(zhí)行結果如下。mysql>SELECTtype,AVG(price)FROMgoodsGROUPBYtype;+------+---------------------+|type|AVG(price) |+------+---------------------+|書籍|69.966667 ||服飾|460.000000 ||水果|2.250000 ||糖類|5.000000 ||飲品|2.500000 |+------+---------------------+5rowsinset(0.03sec)AVG(col_name)MAX()函數(shù)和MIN()函數(shù)4MAX()函數(shù)和MIN()函數(shù)是用于求最大值和最小值的函數(shù),可返回指定字段中的最大值和最小值,或者符合特定條件的指定字段值中的最大值和最小值。【實例7-30】執(zhí)行SQL語句,查詢goods表中商品的最高價格和最低價格,執(zhí)行結果如下。mysql>SELECTMAX(price)maxpri,MIN(price)minpriFROMgoods;+----------+-----------+|maxpri |minpri |+----------+-----------+|800.00 |1.50 |+----------+-----------+1rowinset(0.04sec)MAX(col_name):該方式可以實現(xiàn)計算指定字段值中的最大值,在具體計算時將忽略NULL值。MIN(col_name):該方式可以實現(xiàn)計算指定字段值中的最小值,在具體計算時將忽略NULL值。分組查詢是將查詢結果按照某個或多個字段進行分組,MySQL使用GROUPBY語句對數(shù)據(jù)進行分組。GROUPBY從字面上理解就是“根據(jù)(BY)一定的規(guī)則進行分組(GROUP)”。它的工作原理是按照一定的規(guī)則將一個數(shù)據(jù)集合劃分成若干個小的區(qū)域,然后針對這些區(qū)域的數(shù)據(jù)進行處理,語法形式如下:SELECT{*|col_list}aggregate_funcFROMtable_nameGROUPBYcol_namea[HAVINGcondition];簡單分組查詢1將GROUPBY關鍵字與聚合函數(shù)COUNT()一起使用,可以查詢每組的數(shù)量?!緦嵗?-31】執(zhí)行SQL語句,將goods表中的記錄按照type字段(商品類別)進行分組,并統(tǒng)計每組的數(shù)量,結果如下:mysql>SELECTtype,count(*)FROMgoodsGROUPBYtype;+------+--------------+|type|count(*) |+------+--------------+|書籍|3 ||服飾|2 ||水果|2 ||糖類|2 ||飲品|1 |+------+--------------+5rowsinset(0.02sec)簡單分組查詢1如果需要將每種類型中包含的商品名稱顯示出來,可以使用group_concat()函數(shù)。【實例7-32】執(zhí)行SQL語句,將goods表中的記錄按照type字段進行分組,并顯示每組中的商品名稱,結果如下:mysql>SELECTtype,group_concat(name)FROMgoodsGROUPBYtype;+------+--------------------------------+|type|group_concat(name) |+------+--------------------------------+|書籍|西游記,論語,紅樓夢 ||服飾|休閑西服,牛仔褲 ||水果|西瓜,蘋果 ||糖類|牛奶糖,水果糖 ||飲品|果汁 |+------+--------------------------------+5rowsinset(0.00sec)使用HAVING過濾分組后數(shù)據(jù)2GROUPBY和HAVING一起使用,可以指定顯示記錄所需滿足的條件,只有滿足條件的分組才會被顯示?!緦嵗?-33】執(zhí)行SQL語句,將goods表中的記錄按照type字段分組并統(tǒng)計每組的數(shù)量,然后只取商品數(shù)量大于1的分組,結果如下:mysql>SELECTtype,count(*)FROMgoodsGROUPBYtypeHAVINGCOUNT(*)>1;+------+------------------+|type|count(*) |+------+------------------+|書籍|3 ||服飾|2 ||水果|2 ||糖類|2 |+------+------------------+4rowsinset(0.06sec)使用HAVING過濾分組后數(shù)據(jù)2WHERE子句和HAVING子句都具有按照條件篩選數(shù)據(jù)的功能,兩者的區(qū)別主要有以下幾點:WHERE子句在進行分組操作之前用來選擇記錄,而HAVING子句在進行分組操作之后通過過濾來選擇分組。HAVING子句中的每個字段必須被包含在SELECT關鍵字后的字段列表中。HAVING子句可以包含聚合函數(shù),但WHERE子句不能。使用多個字段進行分組3使用GROUPBY不止可以按照一個字段進行分組,還可以按多個字段進行分組。分組層次從左到右,即先按第1個字段進行分組,然后對第1個字段值相同的記錄,再根據(jù)第2個字段進行分組,依此類推?!緦嵗?-34】執(zhí)行SQL語句,將goods表中的記錄按照type和num字段進行分組并統(tǒng)計,顯示每個分組中商品類別、庫存、商品名稱和商品數(shù)量,執(zhí)行結果如下:mysql>SELECTtype,num,group_concat(name),count(name)FROMgoodsGROUPBYtype,num;+--------+--------+---------------------------+---------------------------+|type|num|group_concat(name)|count(name) |+--------+--------+---------------------------+---------------------------+|書籍|15 |紅樓夢 |1 ||書籍|20 |西游記 |1 ||書籍|50 |論語 |1 ||服飾|10 |休閑西服,牛仔褲 |2 ||水果|NULL|西瓜 |1 ||水果|100|蘋果 |1 ||糖類|100|水果糖 |1 ||糖類|200|牛奶糖 |1 ||飲品|70 |果汁 |1 |+--------+--------+---------------------------+---------------------------+9rowsinset(0.01sec)步驟1
進入NavicatforMySQL后,選擇db_shop數(shù)據(jù)庫,單擊“查詢”按鈕,然后單擊“新建查詢”按鈕,選擇“查詢創(chuàng)建工具”選項卡,如圖7-8所示。圖7-8打開“查詢創(chuàng)建工具”步驟2
單擊“查詢創(chuàng)建工具”右下方編輯區(qū)中的灰色文字“按這里添加表”,選擇需要查詢的db_shop.goods表,如圖7-9所示。圖7-9選擇表步驟3
單擊“按這里添加欄位”文字,可以在“列表”選項卡中選擇需要查詢的字段,也可以在“編輯”選項卡中直接填寫內(nèi)容,此處輸入“type,count(*)”,如圖7-10所示。圖7-10選擇字段步驟4
單擊“按這里添加欄位”文字,可以在“列表”選項卡中選擇需要查詢的字段,也可以在“編輯”選項卡中直接填寫內(nèi)容,此處輸入“type,count(*)”,如圖7-10所示。圖7-11添加篩選條件步驟5
參照上述方法添加其他參數(shù),使查詢按照type字段分組,分組后去掉type值為“飲品”的組,如圖7-12所示。圖7-12多個關鍵字組合查詢步驟6
編輯完查詢語句后,單擊“查詢創(chuàng)建工具”選項卡上方的“運行”按鈕,查詢語句和結果會在“查詢編輯器”選項卡中顯示,如圖7-13所示。圖7-13查看查詢結果8多表數(shù)據(jù)記錄查詢第章8.1基本查詢語句在關系型數(shù)據(jù)庫管理系統(tǒng)中,通常一張表只會存儲一個實體的相關信息,如果用戶需要查詢多張表中不同實體的數(shù)據(jù),可以使用關鍵字JOIN對表執(zhí)行連接查詢操作,但前提條件是,這些表中必須存在具有相同意義的字段。連接查詢主要包括內(nèi)連接查詢和外連接查詢,另外還可以在連接查詢中添加過濾條件,篩選符合條件的數(shù)據(jù),這就是復合條件連接查詢。表8-1staff表結構字
段數(shù)據(jù)類型約
束注
釋staff_idINT(10)無符號、主鍵、自增、非空員工IDsection_idINT(10)無符號、非空部門IDpositions_idINT(10)非空職位IDnameVARCHAR(10)非空姓名sexENUM('男','女')非空性別phone_numberCHAR(11)非空手機號moneyDECIMAL(10,2)無符號、非空,默認值0薪資entry_dateDATETIME非空入職時間字
段數(shù)據(jù)類型約
束注
釋section_idINT(10)無符號、主鍵、自增、非空部門IDsection_titleVARCHAR(20)非空部門名稱表8-2section表結構【實例8-1】本例首先創(chuàng)建數(shù)據(jù)庫staff,然后參照表8-1和表8-2創(chuàng)建數(shù)據(jù)表staff和section,并在其中插入數(shù)據(jù)。CREATEDATABASEstaff;步驟1
登錄MySQL后執(zhí)行以下語句,創(chuàng)建數(shù)據(jù)庫staff。CREATETABLEstaff(staff_idINT(10)UNSIGNEDNOTNULLAUTO_INCREMENT,section_idINT(10)UNSIGNEDNOTNULL,positions_idINT(10)NOTNULL,nameVARCHAR(10)NOTNULL,sexENUM('男','女')NOTNULL,phone_numberCHAR(11)NOTNULL,moneydecimal(10,2)UNSIGNEDNOTNULLDEFAULT'0.00',entry_dateDATETIMENOTNULL,PRIMARYKEY(staff_id));步驟2
選擇數(shù)據(jù)庫staff,并執(zhí)行以下語句創(chuàng)建數(shù)據(jù)表staff。INSERTINTOstaff(staff_id,section_id,positions_id,name,sex,phone_number,money,entry_date)VALUES(1,'1','1','劉長生','男',,20000,'2018-04-0214:35:52'),(2,'1','2','趙霞','女',,10000,'2018-04-0314:40:52'),(3,'2','3','季慶奇','女',,15000,'2018-04-0314:43:52'),(4,'3','3','李星宇','男',,15000,'2018-04-0314:45:52'),(5,'4','3','張向陽','男',,15000,'2018-04-0314:47:24'),(6,'4','8','張旭','男',,10000,'2018-04-0314:50:52');步驟3
執(zhí)行以下SQL語句,向staff表中插入數(shù)據(jù)。CREATETABLEsection(section_idINT(10)UNSIGNEDNOTNULLAUTO_INCREMENT,section_titleVARCHAR(20)NOTNULL,PRIMARYKEY(section_id));步驟4
執(zhí)行以下SQL語句,創(chuàng)建數(shù)據(jù)表section。INSERTINTOsection(section_id,section_title)VALUES(1,'總經(jīng)辦'),(2,'財務部'),(3,'銷售部'),(4,'研發(fā)部'),(5,'運營部'),(6,'人力資源部'),(7,'售后服務部');步驟5
執(zhí)行以下SQL語句,向數(shù)據(jù)表section中插入數(shù)據(jù)。mysql>SELECTstaff_id,name,sex,section_title,phone_numberFROMstaffINNERJOINsection->ONstaff.section_id=section.section_id;+----------+------------+----------+-----------------+-----------------------+|staff_id|name|sex|section_title|phone_number|+----------+------------+----------+-----------------+-----------------------+|1|劉長生|男 |總經(jīng)辦||2|趙霞|女 |總經(jīng)辦||3|季慶奇|女 |財務部||4|李星宇|男|銷售部||5|張向陽|男 |研發(fā)部||6|張旭|男 |研發(fā)部|+----------+------------+----------+-----------------+-----------------------+6rowsinset(0.01sec)普通內(nèi)連接查詢1SELECT{*|col_list}FROMtable_name1INNERJOINtable_name2ONcondition;【實例8-2】在staff表和section表之間使用內(nèi)連接查詢,從staff表中查詢staff_id(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國無機保溫材料項目投資計劃書
- 加強領導班子和干部隊伍建設
- 2021幼師工作報告
- 2025年民族工藝品、旅游紀念品加工項目可行性研究報告申請報告
- 2025年中國黃酮哌酯項目商業(yè)計劃書
- 物流行業(yè)的智能化物流解決方案
- 公司維修雇傭合同協(xié)議書
- 2025年中國非泡沫塑料的板、片、膜、箔項目投資計劃書
- 合伙合同協(xié)議書范本圖片
- 防翹曲強力夾項目投資可行性研究分析報告(2024-2030版)
- 2025-2030中國公共安全無線通信系統(tǒng)行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 應急救援安全應知應會題庫
- 2024-2025學年七年級下學期英語人教版(2024)期末達標測試卷A卷(含解析)
- 2025年河南省鄭州市中原區(qū)中考數(shù)學第三次聯(lián)考試卷
- 2024年廣東高校畢業(yè)生“三支一扶”計劃招募筆試真題
- 5年級語文下冊看拼音寫詞語漢字生字擴詞日積月累專項練習電子版
- 2025至2030年中國護腰帶行業(yè)投資前景及策略咨詢報告
- 廣告宣傳服務方案投標文件(技術方案)
- 2025年山東省聊城市東昌府區(qū)中考二模語文試題(含答案)
- 2025年“六一”少先隊新隊員入隊儀式主持詞
- 空調(diào)崗位試題庫及答案
評論
0/150
提交評論