




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第4單元MySQL查詢MySQL數(shù)據(jù)庫應(yīng)用實戰(zhàn)教程(慕課版)(第2版)目錄【目錄】4.1基本查詢語法4.2數(shù)據(jù)過濾4.2.1基本查詢過濾4.2.2條件查詢過濾4.2.3模糊查詢過濾4.2.4字段去重查詢過濾4.2.5正則表達式查詢過濾4.3子查詢4.3.1什么是子查詢4.3.2按返回結(jié)果分類的子查詢4.3.3按對返回結(jié)果的調(diào)用方法分類的子查詢4.4聚合函數(shù)
4.4.1AVG()函數(shù)
4.4.2COUNT()函數(shù)4.4.3MAX()/MIN()函數(shù)4.4.4SUM()函數(shù)4.4.5窗口函數(shù)4.5高級查詢4.5.1內(nèi)連接查詢4.5.2外連接查詢4.5.3自然連接查詢4.5.4交叉連接查詢4.5.5聯(lián)合查詢4.6綜合實訓(xùn):設(shè)計電商平臺查詢4.7小結(jié)【學習導(dǎo)讀】針對社交媒體平臺做數(shù)據(jù)分析,想要了解用戶發(fā)布的帖子中的熱門話題和熱門用戶。通過使用MySQL查詢,可以輕松獲得這些信息??梢跃帉懸粭lSQL查詢語句,選擇帖子表中的內(nèi)容字段,并使用正則表達式或字符串函數(shù)來提取帖子中的話題關(guān)鍵詞。然后,使用COUNT()函數(shù)計算每個話題出現(xiàn)的次數(shù),并按次數(shù)降序排列結(jié)果。此外,還可以連接用戶表,使用聚合函數(shù)COUNT()來計算每個用戶發(fā)布的帖子數(shù)量,并按數(shù)量降序排列結(jié)果。這樣,就能夠獲得熱門話題和熱門用戶的排行榜,從而更好地了解用戶的興趣和社交互動情況。學習導(dǎo)讀【學習目標】知識目標1.掌握基本查詢語法。2.掌握數(shù)據(jù)過濾的使用方法。3.掌握子查詢的使用方法。4.掌握聚合函數(shù)的使用方法。5.掌握高級查詢的使用方法。能力目標1.能夠使用MySQL查詢進行各種數(shù)據(jù)的復(fù)雜查詢。2.能夠熟練使用各種查詢方式。素質(zhì)目標1.培養(yǎng)解決問題的能力,能夠分析問題并提出解決方案。2.培養(yǎng)組織能力,能夠靈活組織、應(yīng)用各種知識。學習目標思維導(dǎo)圖4.1基本查詢語法MySQL的基本查詢語法包括SELECT、FROM、WHERE、GROUPBY、HAVING、ORDERBY和LIMIT等關(guān)鍵字和子句。SELECT查詢內(nèi)容:用于指定要查詢的列或表達式??梢赃x擇多個列,使用逗號分隔。也可以使用通配符“*”選擇所有列。#查詢所有字段SELECT*FROM表名,*通配符表示所有字段SELECTcolumn1,column2FROMtable_name;SELECT*FROMtable_name;SELECTcolumn1+column2ASsumFROMtable_name;FROM表名:用于指定要查詢的表名??梢圆樵儐蝹€表,也可以連接多個表進行復(fù)雜查詢。SELECTcolumn1,column2FROMtable_name1,table_name2;SELECTcolumn1,column2FROMtable_name1JOINtable_name2ONtable_name1.id=table_name2.id;4.1基本查詢語法WHERE表達式(按條件查詢):可選的子句,用于過濾查詢結(jié)果??梢允褂酶鞣N條件表達式和邏輯運算符進行條件過濾。SELECTcolumn1,column2FROMtable_nameWHEREcolumn1>10;SELECTcolumn1,column2FROMtable_nameWHEREcolumn1='value'ANDcolumn2LIKE'%keyword%';GROUPBY字段名:可選的子句,用于按指定的列對結(jié)果進行分組。通常與聚合函數(shù)一起使用,如SUM()、COUNT()、AVG()等。SELECTcolumn1,COUNT(column2)FROMtable_nameGROUPBYcolumn1;SELECTcolumn1,SUM(column2)FROMtable_nameGROUPBYcolumn1HAVINGSUM(column2)>100;4.1基本查詢語法HAVING表達式:可選的子句,用于對分組結(jié)果進行條件過濾。類似于WHERE子句,但作用于分組后的結(jié)果。SELECTcolumn1,SUM(column2)FROMtable_nameGROUPBYcolumn1HAVINGSUM(column2)>100;ORDERBY字段名:可選的子句,用于對查詢結(jié)果進行排序。可以按照一個或多個列進行升序(ASC)或降序(DESC)排列。SELECTcolumn1,column2FROMtable_nameORDERBYcolumn1ASC;SELECTcolumn1,column2FROMtable_nameORDERBYcolumn1DESC,column2ASC;LIMIT記錄數(shù):可選的子句,用于限制查詢結(jié)果的數(shù)量。可以指定返回的記錄數(shù)量,也可以指定跳過的記錄數(shù)量和返回的記錄數(shù)量??梢韵拗泼看尾樵兌嗌贄l數(shù)據(jù),進行分頁查詢。4.1基本查詢語法實戰(zhàn)演練——查詢數(shù)據(jù)#使用用戶名root和相應(yīng)密碼,連接本地數(shù)據(jù)庫C:\Users\Administrator>mysql-uroot-p123456mysql:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.#使用shop數(shù)據(jù)庫mysql>USEshop;Databasechanged#查詢user表里的數(shù)據(jù),顯示所有字段的數(shù)據(jù)mysql>SELECT*FROMuser;
+----+-------+------+------+----------+|id|name|sex|age|password|+----+-------+------+------+----------+|3|david|女|28|111111||4|小紅|女|27|123456||5|小明|男|10|123456||6|小剛|男|12|123456||7|小王|男|14|111111||8|小綠|女|34|222222||9|曉峰|男|15|333333||10|小影|女|26|444444||11|大梅|女|27|555555|+----+-------+------+------+----------+4.1基本查詢語法#查詢user表里的數(shù)據(jù),只顯示name字段的數(shù)據(jù)mysql>SELECTnameFROMuser;+-------+|name|+-------+|david||小紅||小明||小剛||小王||小綠||曉峰||小影||大梅|+-------+9rowsinset(0.00sec)#按條件進行查詢,查詢性別為男的數(shù)據(jù)mysql>SELECT*FROMuserWHEREsex='男';+----+------+------+------+----------+|id|name|sex|age|password|+----+------+------+------+----------+|5|小明|男|10|123456||6|小剛|男|12|123456||7|小王|男|14|111111||9|曉峰|男|15|333333|+----+------+------+------+----------+4rowsinset(0.00sec)4.1基本查詢語法#查詢年齡大于20的數(shù)據(jù)mysql>SELECT*FROMuserWHEREage>20;+----+-------+------+------+----------+|id|name|sex|age|password|+----+-------+------+------+----------+|3|david|女|28|111111||4|小紅|女|27|123456||8|小綠|女|34|222222||10|小影|女|26|444444||11|大梅|女|27|555555|+----+-------+------+------+----------+5rowsinset(0.00sec)#查詢總共有多少條數(shù)據(jù)mysql>SELECTcount(*)FROMuser;
+----------+|count(*)|+----------+|9|+----------+1rowinset(0.08sec)#查詢年齡總和mysql>SELECTsum(age)FROMuser;+----------+|sum(age)|+----------+|193|+----------+1rowinset(0.05sec)#查詢年齡最大的數(shù)據(jù)mysql>SELECTmax(age)FROMuser;+----------+|max(age)|+----------+|34|+----------+1rowinset(0.04sec)4.1基本查詢語法#按性別進行分組查詢mysql>SELECTsex,count(*)FROMuserGROUPBYsex;+------+----------+|sex|count(*)|+------+----------+|女|5||男|4|+------+----------+2rowsinset(0.01sec)#按年齡降序排列查詢mysql>SELECT*FROMuserORDERBYageDESC;
+----+-------+------+------+----------+|id|name|sex|age|password|+----+-------+------+------+----------+|8|小綠|女|34|222222||3|david|女|28|111111||4|小紅|女|27|123456||11|大梅|女|27|555555||10|小影|女|26|444444||9|曉峰|男|15|333333||7|小王|男|14|111111||6|小剛|男|12|123456||5|小明|男|10|123456|+----+-------+------+------+----------+9rowsinset(0.00sec)4.1基本查詢語法#按年齡升序排列查詢mysql>SELECT*FROMuserORDERBYageASC;+----+-------+------+------+----------+|id|name|sex|age|password|+----+-------+------+------+----------+|5|小明|男|10|123456||6|小剛|男|12|123456||7|小王|男|14|111111||9|曉峰|男|15|333333||10|小影|女|26|444444||4|小紅|女|27|123456||11|大梅|女|27|555555||3|david|女|28|111111||8|小綠|女|34|222222|+----+-------+------+------+----------+9rowsinset(0.00sec)#查詢前5條數(shù)據(jù)mysql>SELECT*FROMuserLIMIT0,5;
+----+-------+------+------+----------+|id|name|sex|age|password|+----+-------+------+------+----------+|3|david|女|28|111111||4|小紅|女|27|123456||5|小明|男|10|123456||6|小剛|男|12|123456||7|小王|男|14|111111|+----+-------+------+------+----------+5rowsinset(0.00sec)mysql>4.2數(shù)據(jù)過濾4.2.1基本查詢過濾基本查詢過濾可以用來查詢所有字段數(shù)據(jù),或指定一個字段或者多個字段的數(shù)據(jù)。#查詢所有字段數(shù)據(jù)SELECT*FROMtable_name;查詢指定一個字段的數(shù)據(jù)SELECTcolumn1FROMtable_name;#查詢指定多個字段的數(shù)據(jù)SELECTcolumn1,column2FROMtable_name;#使用用戶名root和相應(yīng)密碼,連接本地數(shù)據(jù)庫。C:\Users\Administrator>mysql-uroot-p123456#使用數(shù)據(jù)庫shopmysql>USEshop;Databasechanged實戰(zhàn)演練——基本查詢過濾4.2數(shù)據(jù)過濾#查詢所有字段的數(shù)據(jù)mysql>SELECT*FROMuser;+----+-------+------+------+----------+|id|name|sex|age|password|+----+-------+------+------+----------+|3|david|女|28|111111||4|小紅|女|27|123456||5|小明|男|10|123456||6|小剛|男|12|123456||7|小王|男|14|111111||8|小綠|女|34|222222||9|曉峰|男|15|333333||10|小影|女|26|444444||11|大梅|女|27|555555|+----+-------+------+------+----------+9rowsinset(0.00sec)#查詢指定多個字段的數(shù)據(jù)mysql>SELECTname,sex,ageFROMuser;+-------+------+------+|name|sex|age|+-------+------+------+|david|女|28||小紅|女|27||小明|男|10||小剛|男|12||小王|男|14||小綠|女|34||曉峰|男|15||小影|女|26||大梅|女|27|+-------+------+------+9rowsinset(0.00sec)4.2數(shù)據(jù)過濾4.2.2條件查詢過濾條件查詢過濾是指使用關(guān)鍵字來篩選滿足特定條件的數(shù)據(jù)。條件查詢過濾關(guān)鍵字包括AND、OR、IN、NOTIN、ISNULL、ISNOTNULL、BETWEENAND等??梢栽O(shè)置一個條件或者多個條件進行查詢。#使用一個條件的條件過濾查詢SELECT*FROMtable_nameWHEREcolumn1='value';#使用多個條件的條件過濾查詢SELECT*FROMtable_nameWHEREcolumn1='value'ANDcolumn2>10;010203AND(與):用AND進行查詢的時候,查詢出來的數(shù)據(jù)要滿足所有條件。OR(或):用OR進行查詢的時候,查詢出來的數(shù)據(jù)滿足任意一個條件就可以。IN(在范圍內(nèi)):用IN進行查詢的時候,查詢出來的數(shù)據(jù)在指定范圍內(nèi)。04NOTIN(不在范圍內(nèi)):用NOTIN進行查詢的時候,查詢出來的數(shù)據(jù)不在指定范圍內(nèi)。05ISNULL(為空):用ISNULL進行查詢的時候,不能使用"=null",因為MySQL中的NULL不等于任何其他值,也不等于另外一個NULL,優(yōu)化器會把"=null"的查詢過濾掉而不返回任何數(shù)據(jù)。06BETWEENAND(在……區(qū)間):用BETWEENAND進行查詢的時候,查詢出來的數(shù)據(jù)在指定區(qū)間。4.2數(shù)據(jù)過濾實戰(zhàn)演練——條件查詢過濾#使用用戶名root和相應(yīng)密碼,連接本地數(shù)據(jù)庫C:\Users\Administrator>mysql-uroot-p123456mysql:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.#使用數(shù)據(jù)庫shopmysql>USEshop;Databasechanged#無條件查詢所有數(shù)據(jù)mysql>SELECT*FROMuser;+----+-------+------+------+----------+|id|name|sex|age|password|+----+-------+------+------+----------+|3|david|女|28|111111||4|小紅|女|27|123456||5|小明|男|10|123456||6|小剛|男|12|123456||7|小王|男|14|111111||8|小綠|女|34|222222||9|曉峰|男|15|333333||10|小影|女|26|444444||11|大梅|女|27|555555|+----+-------+------+------+----------+9rowsinset(0.00sec)4.2數(shù)據(jù)過濾#使用AND,查詢性別為女并且年齡大于27歲的數(shù)據(jù)mysql>SELECT*FROMuserWHEREsex='女'andage>27;+----+-------+------+------+----------+|id|name|sex|age|password|+----+-------+------+------+----------+|3|david|女|28|111111||8|小綠|女|34|222222|+----+-------+------+------+----------+2rowsinset(0.00sec)#使用OR,查詢姓名為小影或者姓名為小明的數(shù)據(jù)mysql>SELECT*FROMuserWHEREname='小影'orname='小明';+----+------+------+------+----------+|id|name|sex|age|password|+----+------+------+------+----------+|5|小明|男|10|123456||10|小影|女|26|444444|+----+------+------+------+----------+2rowsinset(0.00sec)4.2數(shù)據(jù)過濾#使用IN,查詢id在(3,5,7)范圍內(nèi)的數(shù)據(jù)mysql>SELECT*FROMuserWHEREidIN(3,5,7);+----+-------+------+------+----------+|id|name|sex|age|password|+----+-------+------+------+----------+|3|david|女|28|111111||5|小明|男|10|123456||7|小王|男|14|111111|+----+-------+------+------+----------+3rowsinset(0.00sec)#使用NOTIN,查詢id不在(3,5,7)范圍內(nèi)的數(shù)據(jù)mysql>SELECT*FROMuserWHEREidNOTIN(3,5,7);+----+------+------+------+----------+|id|name|sex|age|password|+----+------+------+------+----------+|4|小紅|女|27|123456||6|小剛|男|12|123456||8|小綠|女|34|222222||9|曉峰|男|15|333333||10|小影|女|26|444444||11|大梅|女|27|555555|+----+------+------+------+----------+6rowsinset(0.00sec)#使用ISNULL,查詢年齡為空的數(shù)據(jù)mysql>SELECT*FROMuserWHEREageISNULL;Emptyset(0.00sec)4.2數(shù)據(jù)過濾#使用ISNOTNULL,查詢年齡不為空的數(shù)據(jù)mysql>SELECT*FROMuserWHEREageISNOTNULL;+----+-------+------+------+----------+|id|name|sex|age|password|+----+-------+------+------+----------+|3|david|女|28|111111||4|小紅|女|27|123456||5|小明|男|10|123456||6|小剛|男|12|123456||7|小王|男|14|111111||8|小綠|女|34|222222||9|曉峰|男|15|333333||10|小影|女|26|444444||11|大梅|女|27|555555|+----+-------+------+------+----------+9rowsinset(0.00sec)#查詢年齡大于20歲并且小于30歲的數(shù)據(jù)mysql>SELECT*FROMuserWHEREage>20andage<30;+----+-------+------+------+----------+|id|name|sex|age|password|+----+-------+------+------+----------+|3|david|女|28|111111||4|小紅|女|27|123456||10|小影|女|26|444444||11|大梅|女|27|555555|+----+-------+------+------+----------+4rowsinset(0.00sec)4.2數(shù)據(jù)過濾#使用BTWEENAND,查詢年齡大于20歲并且小于30歲的數(shù)據(jù)mysql>SELECT*FROMuserWHEREageBTWEEN20AND30;+----+-------+------+------+----------+|id|name|sex|age|password|+----+-------+------+------+----------+|3|david|女|28|111111||4|小紅|女|27|123456||10|小影|女|26|444444||11|大梅|女|27|555555|+----+-------+------+------+----------+4rowsinset(0.01sec)#查詢性別為男的數(shù)據(jù)mysql>SELECT*FROMuserWHEREsex='男';+----+------+------+------+----------+|id|name|sex|age|password|+----+------+------+------+----------+|5|小明|男|10|123456||6|小剛|男|12|123456||7|小王|男|14|111111||9|曉峰|男|15|333333|+----+------+------+------+----------+4rowsinset(0.00sec)4.2數(shù)據(jù)過濾#查詢性別不為男的數(shù)據(jù)mysql>SELECT*FROMuserWHEREsex!='男';+----+-------+------+------+----------+|id|name|sex|age|password|+----+-------+------+------+----------+|3|david|女|28|111111||4|小紅|女|27|123456||8|小綠|女|34|222222||10|小影|女|26|444444||11|大梅|女|27|555555|+----+-------+------+------+----------+5rowsinset(0.00sec)#查詢性別不為男的數(shù)據(jù)mysql>SELECT*FROMuserWHEREsex<>'男';+----+-------+------+------+----------+|id|name|sex|age|password|+----+-------+------+------+----------+|3|david|女|28|111111||4|小紅|女|27|123456||8|小綠|女|34|222222||10|小影|女|26|444444||11|大梅|女|27|555555|+----+-------+------+------+----------+5rowsinset(0.00sec)mysql>4.2數(shù)據(jù)過濾4.2.3模糊查詢過濾1.百分號(%)通配符LIKE'張%':使用LIKE查詢指定字段以“張”開頭的數(shù)據(jù)。SELECT*FROMtable_nameWHEREnamelike'張%';LIKE'%明':使用LIKE查詢指定字段以“明”結(jié)尾的數(shù)據(jù)。SELECT*FROMtable_nameWHEREnamelike'%明';LIKE'%明%':使用LIKE查詢指定字段包含“明”的數(shù)據(jù)。SELECT*FROMtable_nameWHEREnamelike'%明%';2.下畫線(_)通配符下畫線(_)用于匹配單個字符,可以出現(xiàn)在模式的任意位置。SELECT*FROMtable_nameWHEREcolumn_nameLIKE'pattern_';4.2數(shù)據(jù)過濾3.通配符的結(jié)合使用可以同時使用百分號(%)和下畫線(_)來創(chuàng)建更精確的模式。SELECT*FROMtable_nameWHEREcolumn_nameLIKE'p%tern_';4.ESCAPE關(guān)鍵字ESCAPE關(guān)鍵字用于指定轉(zhuǎn)義字符,以避免與模糊查詢通配符產(chǎn)生沖突。當模糊查詢的模式中包含通配符本身而不是通配符的含義時,可以使用ESCAPE關(guān)鍵字來轉(zhuǎn)義這些字符,使其被視為普通字符而不是通配符。#'pattern'是要匹配的模式#'escape_character'是指定的轉(zhuǎn)義字符SELECT*FROMtable_nameWHEREcolumn_nameLIKE'pattern'ESCAPE'escape_character’;#將第二個%字符前面的!字符作為轉(zhuǎn)義字符,使得第二個%字符被視為普通字符進行匹配SELECT*FROMtable_nameWHEREcolumn_nameLIKE'%!%'ESCAPE'!';4.2數(shù)據(jù)過濾4.2.4字段去重查詢過濾在MySQL中,DISTINCT關(guān)鍵字用于在查詢結(jié)果中去除重復(fù)的行。它可以應(yīng)用于SELECT語句,使得查詢結(jié)果只返回唯一的值。DISTINCT:去除重復(fù)的列值。SELECTDISTINCTcolumn_nameFROMtable_name;AS:可以設(shè)置列的別名,也可以省略AS關(guān)鍵字。SELECTcolumn_nameas姓名FROMtable_name;或者SELECTcolumn_name姓名FROMtable_name;;4.2數(shù)據(jù)過濾實戰(zhàn)演練——字段控制查詢過濾#使用用戶名root和相應(yīng)密碼,連接本地數(shù)據(jù)庫C:\Users\Administrator>mysql-uroot-p123456mysql:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.#使用數(shù)據(jù)庫shopmysql>USEshop;Databasechanged#查詢user表里的所有數(shù)據(jù)mysql>SELECT*FROMuser;+----+-------+------+------+----------+|id|name|sex|age|password|+----+-------+------+------+----------+|3|david|女|28|111111||4|小紅|女|27|123456||5|小明|男|10|123456||6|小剛|男|12|123456||7|小王|男|14|111111||8|小綠|女|34|222222||9|曉峰|男|15|333333||10|小影|女|26|444444||11|大梅|女|27|555555|+----+-------+------+------+----------+9rowsinset(0.01sec)4.2數(shù)據(jù)過濾#去重查詢性別mysql>SELECTDISTINCTsexFROMuser;+-----+|sex|+-----+|女||男|+-----+2rowsinset(0.00sec)#去重查詢年齡mysql>SELECTDISTINCTageFROMuser;+------+|age|+------+|28||27||10||12||14||34||15||26|+------+8rowsinset(0.00sec)#查詢id與age之和mysql>SELECT*,id+ageFROMuser;+----+-------+------+------+----------+--------+|id|name|sex|age|password|id+age|+----+-------+------+------+----------+--------+|3|david|女|28|111111|31||4|小紅|女|27|123456|31||5|小明|男|10|123456|15||6|小剛|男|12|123456|18||7|小王|男|14|111111|21||8|小綠|女|34|222222|42||9|曉峰|男|15|333333|24||10|小影|女|26|444444|36||11|大梅|女|27|555555|38|+----+-------+------+------+----------+--------+9rowsinset(0.01sec)4.2數(shù)據(jù)過濾#查詢id與age之和,使用AS關(guān)鍵字設(shè)置別名totalmysql>SELECT*,id+ageAStotalFROMuser;+----+-------+------+------+----------+-------+|id|name|sex|age|password|total|+----+-------+------+------+----------+-------+|3|david|女|28|111111|31||4|小紅|女|27|123456|31||5|小明|男|10|123456|15||6|小剛|男|12|123456|18||7|小王|男|14|111111|21||8|小綠|女|34|222222|42||9|曉峰|男|15|333333|24||10|小影|女|26|444444|36||11|大梅|女|27|555555|38|+----+-------+------+------+----------+-------+9rowsinset(0.00sec)#查詢id與age之和,不使用AS關(guān)鍵字設(shè)置別名totalmysql>SELECT*,id+agetotalFROMuser;+----+-------+------+------+----------+-------+|id|name|sex|age|password|total|+----+-------+------+------+----------+-------+|3|david|女|28|111111|31||4|小紅|女|27|123456|31||5|小明|男|10|123456|15||6|小剛|男|12|123456|18||7|小王|男|14|111111|21||8|小綠|女|34|222222|42||9|曉峰|男|15|333333|24||10|小影|女|26|444444|36||11|大梅|女|27|555555|38|+----+-------+------+------+----------+-------+9rowsinset(0.00sec)mysql>4.2數(shù)據(jù)過濾4.2.5正則表達式查詢過濾正則表達式用來匹配文本中的特殊字符串或字符集合。可以將正則表達式與文本進行比較,查詢出滿足正則表達式的數(shù)據(jù)。MySQL用WHERE子句對正則表達式提供了初步的支持,使用REGEXP關(guān)鍵字指定正則表達式的字符匹配模式,允許指定用正則表達式過濾SELECT語句檢索出的數(shù)據(jù)。匹配模式含義例子及說明示例^匹配文本開始字符^b匹配以字母b開頭的字符串banner,bag$匹配文本結(jié)束字符st$匹配以st結(jié)尾的字符串test,persist.匹配任何單個字符b.t匹配任何b和t之間有一個字符的字符串bit,bat,but*匹配0個或多個在它前面的字符f*n匹配f和n之間有任意個字符的字符串fn,fan,faan+匹配前面的字符1次或多次ba+匹配以b開頭后面緊跟至少一個a的字符串ba,bay,bare<字符串>匹配包含指定字符串的文本fa匹配包含fa的字符串fan,afa,faad[字符集合]匹配字符集合中的任何一個字符[xz]匹配包含x或者z的字符串dizzy,zebra,x-ray[^]匹配不在括號中的任何字符[^abc]匹配任何不包含a、b、c的字符串desk,fox,f8ke字符串{n,}匹配前面的字符串至少n次b{2}匹配2個或更多bbbb,bbb,bbbbbb字符串{n,m}匹配前面的字符串至少n次,至多m次。如果n為0,此參數(shù)為可選參數(shù)b{2,4}匹配最少2個b、最多4個bbb,bbb,bbbb4.3子查詢4.3.1什么是子查詢1.子查詢的語法子查詢可以出現(xiàn)在SELECT、FROM、WHERE或HAVING子句中,并可以嵌套多個層級。在SELECT子句中,子查詢可以作為列的值,返回單個值或單列結(jié)果集。在FROM子句中,子查詢可以作為派生表,返回多列結(jié)果集。在WHERE或HAVING子句中,子查詢可以作為條件,返回符合條件的數(shù)據(jù)。2.子查詢的作用過濾數(shù)據(jù):可以使用子查詢在WHERE子句中過濾數(shù)據(jù),根據(jù)子查詢的結(jié)果來決定主查詢的結(jié)果。做計算:子查詢可以作為SELECT子句的一部分,用于計算和返回特定的值。進行連接:子查詢可以作為主查詢的表之一,與其他表進行連接操作。做子集查詢:子查詢可以用于查詢某個表中的子集數(shù)據(jù),從而滿足更復(fù)雜的查詢需求。4.3子查詢子查詢可以返回單個值、單列結(jié)果集或多列結(jié)果集,具體取決于子查詢的語法和位置子查詢可以引用外部查詢的列和表,以進行關(guān)聯(lián)和比較操作。子查詢可以使用各種查詢運算符(如IN、ANY、ALL、EXISTS)和比較運算符(如=、<、>)來實現(xiàn)不同的邏輯。3.子查詢的特點4.3子查詢4.3.2按返回結(jié)果分類的子查詢(1)表子查詢在主查詢中嵌套的查詢語句,其返回的結(jié)果是一個表。查詢用戶表user中年齡大于20歲的用戶的姓名、性別、年齡。SELECT*FROM(SELECTname,sex,ageFROMuserWHEREage>20)ASuser20;#使用用戶名root和相應(yīng)密碼,連接本地數(shù)據(jù)庫C:\Users\Administrator>mysql-uroot-p123456mysql:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.#使用數(shù)據(jù)庫shopmysql>USEshop;Databasechanged#查詢用戶表user中年齡大于20歲的用戶的姓名、性別、年齡mysql>SELECT*FROM(SELECTname,sex,ageFROMuserWHEREage>20)ASuser20;+-------+------+------+|name|sex|age|+-------+------+------+|david|女|28||小紅|女|27||小綠|女|34||小影|女|26||大梅|女|27|+-------+------+------+5rowsinset(0.00sec)mysql>4.3子查詢(2)行子查詢在主查詢的WHERE或HAVING子句中嵌套的查詢語句,其返回的結(jié)果是一個或多個行。查詢和david性別相同的用戶。SELECT*FROMuserWHEREsex=(SELECTsexFROMuserWHEREname='david');#使用用戶名root和相應(yīng)密碼,連接本地數(shù)據(jù)庫C:\Users\Administrator>mysql-uroot-p123456mysql:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.#使用數(shù)據(jù)庫shopmysql>USEshop;Databasechanged#查詢和david性別相同的用戶mysql>SELECT*FROMuserWHEREsex=(SELECTsexFROMuserWHEREname='david');+----+-------+------+------+----------+|id|name|sex|age|password|+----+-------+------+------+----------+|3|david|女|28|111111||4|小紅|女|27|123456||8|小綠|女|34|222222||10|小影|女|26|444444||11|大梅|女|27|555555|+----+-------+------+------+----------+5rowsinset(0.01sec)mysql>4.3子查詢(3)列子查詢在主查詢的SELECT子句中嵌套的查詢語句,其返回的結(jié)果是一個或多個列。查詢性別為女的id和name。SELECTid,nameFROMuserWHEREidin(SELECTidFROMuserWHEREsex='女');查詢年齡大于david的用戶的id、name、age。SELECTid,name,ageFROMuserWHEREage>any(SELECTageFROMuserWHEREname='david');查詢年齡最小的用戶。SELECT*FROMuserWHEREage<=all(SELECTageFROMuser);4.3子查詢(4)標量子查詢返回單個標量(單個值)的子查詢。它通常用于獲取一個表達式的值。標量子查詢的結(jié)果可以直接作為主查詢的一部分進行使用,例如作為SELECT語句的一部分、WHERE子句的條件或作為其他計算的輸入。#使用用戶名root和相應(yīng)密碼,連接本地數(shù)據(jù)庫C:\Users\Administrator>mysql-uroot-p123456mysql:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.#使用數(shù)據(jù)庫shopmysql>USEshop;Databasechanged#查詢用戶表usermysql>SELECT*FROMuser;+----+-------+------+------+----------+|id|name|sex|age|password|+----+-------+------+------+----------+|3|david|女|28|111111||4|小紅|女|27|123456||5|小明|男|10|123456||6|小剛|男|12|123456||7|小王|男|14|111111||8|小綠|女|34|222222||9|曉峰|男|15|333333||10|小影|女|26|444444||11|大梅|女|27|555555|+----+-------+------+------+----------+9rowsinset(0.00sec)#查詢和id為4的用戶年齡相同的用戶mysql>SELECTnameFROMuserWHEREage=(SELECTageFROMuserWHEREid=4)andid!=4;+------+|name|+------+|大梅|+------+1rowinset(0.00sec)mysql>4.3子查詢4.3.3按對返回結(jié)果的調(diào)用方法分類的子查詢(1)WHERE型子查詢嵌套在主查詢的WHERE子句中的子查詢。它可以用來根據(jù)子查詢的結(jié)果過濾主查詢的數(shù)據(jù)。WHERE型子查詢返回的結(jié)果可以是一個值、一列或多行數(shù)據(jù),把內(nèi)層查詢的結(jié)果作為外層查詢的條件。SELECTcolumn1,column2FROMtable1WHEREcolumn1IN(SELECTcolumn1FROMtable2);(2)FROM型子查詢嵌套在主查詢的FROM子句中的子查詢。它將子查詢作為一個派生表,并將其結(jié)果與其他表進行連接操作。FROM型子查詢可以用于處理復(fù)雜的數(shù)據(jù)關(guān)聯(lián)和多表查詢。將返回的結(jié)果集作為一個臨時表,臨時表要設(shè)置別名,然后在臨時表中進行查詢。FROM(SELECTcolumn1,column2FROMtable1)ASderived_tableJOINtable2ONderived_table.column1=table2.column1;4.3子查詢(3)EXISTS型子查詢EXISTS型子查詢是一種特殊的子查詢,它用于判斷子查詢是否返回結(jié)果,并根據(jù)結(jié)果的存在與否決定主查詢的行是否被包含。EXISTS型子查詢通常用于將子查詢的結(jié)果與主查詢進行關(guān)聯(lián),以判斷是否存在匹配的數(shù)據(jù)。把外層查詢結(jié)果拿到內(nèi)層,看內(nèi)層的查詢是否成立,使用EXISTS關(guān)鍵字時,內(nèi)層查詢語句不返回查詢的記錄,而是返回一個布爾值。SELECTcolumn1,column2FROMtable1WHEREEXISTS(SELECT*FROMtable2WHEREtable1.column1=table2.column1);4.4聚合函數(shù)4.4.1AVG()函數(shù)MySQL數(shù)據(jù)庫中的AVG()函數(shù)用來計算某列的平均值,如可以用于計算平均分數(shù)、平均薪資、平均年齡等。#返回column1列的平均值SELECTAVG(column1)FROMtable_name;#返回滿足條件的column2列的平均值SELECTAVG(column2)FROMtable_nameWHEREcolumn1>100;4.4.2COUNT()函數(shù)MySQL數(shù)據(jù)庫中的COUNT()函數(shù)用來計算表中記錄的個數(shù)或者列中值的個數(shù),可以用于計算滿足特定條件的行數(shù)。計算內(nèi)容由SELECT語句指定。#返回表中的總行數(shù)SELECTCOUNT(*)FROMtable_name;#返回column1列的非空值行數(shù)SELECTCOUNT(column1)FROMtable_name;#返回滿足條件的行數(shù)SELECTCOUNT(*)FROMtable_nameWHEREcolumn>100;4.4聚合函數(shù)4.4.3MAX()/MIN()函數(shù)MySQL數(shù)據(jù)庫中的MAX()函數(shù)用于選取數(shù)據(jù)中的最大值,MIN()函數(shù)用于選取數(shù)據(jù)中的最小值。#返回column1列的最大值SELECTMAX(column1)FROMtable_name;#返回滿足條件的column2列的最大值SELECTMAX(column2)FROMtable_nameWHEREcolumn1>100;#返回column1列的最小值SELECTMIN(column1)FROMtable_name;#返回滿足條件的column2列的最小值SELECTMIN(column2)FROMtable_nameWHEREcolumn1>100;4.4.4SUM()函數(shù)MySQL數(shù)據(jù)庫中的SUM()函數(shù)用來計算滿足條件的某一列的總和,聚合函數(shù)都可以設(shè)置別名。#返回column1列的總和SELECTSUM(column1)FROMtable_name;#返回滿足條件的column2列的總和SELECTSUM(column2)FROMtable_nameWHEREcolumn1>100;4.4聚合函數(shù)4.4.5窗口函數(shù)窗口函數(shù)可以在查詢中創(chuàng)建一個“窗口”,并對窗口內(nèi)的數(shù)據(jù)進行計算和排序,而不影響查詢結(jié)果的行數(shù)。窗口函數(shù)與SUM()、COUNT()這種分組聚合函數(shù)類似,在聚合函數(shù)后面加上OVER()就變成窗口函數(shù),在括號里可以加上PARTITIONBY等分組關(guān)鍵字指定如何分組。窗口函數(shù)即便分組也不會將多行查詢結(jié)果合并為一行,而是將結(jié)果放回多行當中,即窗口函數(shù)不需要再使用GROUPBY。<聚合函數(shù)>(<列或表達式>)OVER(PARTITIONBY<分組列>ORDERBY<排序列><窗口幀>)SELECTcustomer_id,order_date,total_amount,SUM(total_amount)OVER(PARTITIONBYcustomer_idORDERBYorder_date)AScumulative_amountFROMorders;4.4聚合函數(shù)常用的窗口函數(shù)010203ROW_NUMBER():為每一行生成一個唯一的行號。RANK():為每個分組內(nèi)的行分配一個排名。DENSE_RANK():為每個分組內(nèi)的行分配一個密集排名,跳過相同排名的空位。04NTILE():將每個分組劃分為指定數(shù)量的桶,并為每個行分配桶號。0506EAD():獲取當前行之后指定偏移量的列值。
SUM()、AVG()、MIN()、MAX()等聚合函數(shù),通過OVER子句實現(xiàn)對窗口內(nèi)數(shù)據(jù)的聚合操作。4.5高級查詢4.5.1內(nèi)連接查詢內(nèi)連接查詢使用JOIN關(guān)鍵字將兩張或多張表中的行連接起來,只返回滿足連接條件的行。內(nèi)連接查詢可以使用ON子句來指定連接條件。SELECT*FROM左表[INNER]JOIN右表ON左表.字段=右表.字段;ON關(guān)鍵字表示連接條件,條件字段代表相同的業(yè)務(wù)含義,如user.id和score.id。內(nèi)連接查詢可以沒有連接條件,沒有ON之后的內(nèi)容,這樣會保留所有結(jié)果。內(nèi)連接查詢可以使用WHERE代替ON,通常不用WHERE,因為WHERE沒有ON效率高。通常使用字段別名、表別名,在查詢數(shù)據(jù)的時候,若不同表有同名字段,需要使用別名加以區(qū)分。等值連接:使用等號“=”比較兩個表的連接列的值,取兩表連接列的值相等的記錄。非等值連接:使用大于號“>”或小于號“<”比較兩個表的連接列的值,取一個表大于或小于另一個表的連接列的值的記錄。4.5高級查詢4.5.2外連接查詢外連接查詢使用LEFTJOIN、RIGHTJOIN關(guān)鍵字,將兩張或多張表中的行連接起來,并返回滿足連接條件的行或未滿足連接條件的行。外連接查詢分為左外連接查詢和右外連接查詢。它是使用關(guān)鍵字OUTERJOINON進行連接查詢的。SELECT*FROM左表LEFT/RIGHTJOIN右表ON左表.字段=右表.字段;LEFTJOIN也可寫成LEFTOUTERJOIN,左外連接查詢返回左表中符合條件的所有行。如果左表中的記錄在右表中沒有匹配,那么在結(jié)果集中相關(guān)右表的列顯示為NULL。RIGHTJOIN也可寫成RIGHTOUTERJOIN,右外連接查詢返回所有符合條件的右表記錄。如果右表中的記錄在左表中沒有匹配,那么相關(guān)左表的列顯示為NULL。ON后面的條件不可以省略。4.5高級查詢4.5.3自然連接查詢自然連接查詢根據(jù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 唐鋼技校電工考試試題及答案
- 水利工勤人員技師考試試題及答案
- 社會團體考試試題及答案
- 精油小白測試題及答案
- 外地返鄉(xiāng)面試題及答案
- 中國建筑史考試試題及答案
- 2025年erp的證件考試題庫
- 2025年專業(yè)高級電工考試題庫
- 2025年旅館考試題庫
- 2025年助理編制考試題庫
- 中級消防員考試試題及答案
- 教學設(shè)計課件比賽封面設(shè)計
- 2025年游泳池設(shè)施設(shè)備器材安全檢查制度(二篇)
- 2025考研408計算機基礎(chǔ)綜合真題及答案
- 職業(yè)病危害因素檢測與評價-工作場所空氣中粉塵濃度的測定
- 展臺搭建施工管理辦法
- 兒科穴位貼敷治療講課件
- 2025年湖北省中考英語試題(附答案)
- 三一研發(fā)項目管理制度
- 輪胎公司中長期發(fā)展戰(zhàn)略規(guī)劃綱要(2025-2030年)
- 浙江省衢州市2023-2024學年高二下學期6月教學質(zhì)量檢測數(shù)學試題(含答案)
評論
0/150
提交評論