亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

詳解MySQL分組鏈接的使用技巧

2024-07-24 13:15:09
字體:
來源:轉載
供稿:網友

MYSQL中的分組和鏈接是在操作數據庫和數據交互時最常用的兩個在功能,把這兩項處理好了,MYSQL的執行效率會非常高速。

一、group by ,分組

顧名思義,把數據按什么來分組,每一組都有什么特點。

1、我們先從最簡單的開始:

select count(*) from tb1 group by tb1.sex;

查詢所有數據的條數,按性別來分組。這樣查詢到的結果集只有一列count(*)。

2、然后我們來分析一下,這個分組,我們能在select 和 from 之間放一些什么呢?

當數據分組之后,數據的大部分字段都將失去它存在的意義,大家想想,多條數據的同一列,只顯示一個值,那到底顯示誰的,這個值有用嗎?

通過思考,不難發現,只有by的那些列可以放進去,然后就是sql的函數操作了,比如count(),sum()……(包含在by后面作為分組的依據,包含在聚合函數中作為結果)

例:查詢每個學院的學生有多少人:(學院的值是學院的id)

SELECT a.COLLEGE AS 學院,COUNT(*) AS 學生人數 FROM base_alumni a GROUP BY a.COLLEGE;

MySQL,分組,鏈接

3、where,having,和group by聯合使用

在最初學習group by的時候,我就陷入了一個誤區,那就是group by不能和where一起使用,只能用having……

看書不認真啊,其實它們都是可以一起使用的,只不過是where只能在group by 的前面,having只能在group by 的后面。

where,過濾條件的關鍵字,但是它只能對group by之前的數據進行過濾篩選;

having,也是過濾條件的關鍵字作用和where是一樣的,但是它過濾的是分組后的數據,就是對分組后得到的結果集進行過濾篩選。

出現having其實我覺得就是為了解決一條語句出現兩個where的問題,把它們區分開來

例:

查詢 30100學院的每個專業的學生有多少人。

SELECT a.MAJOR AS 專業, COUNT(*) AS 學生人數 FROM base_alumni a WHERE a.COLLEGE = 30100 GROUP BY a.MAJOR;

MySQL,分組,鏈接

查詢每個學院的學生有多少人,并且只要學生人數大于3的。

SELECT a.COLLEGE AS 學院,COUNT(*) AS 學生人數 FROM base_alumni a GROUP BY a.COLLEGE HAVING COUNT(*)>3;

MySQL,分組,鏈接

濾清執行順序:①先對*進行篩選,②對篩選的結果進行分組,③對分組的結果進行篩選

4、Group By All 的使用,哈哈哈哈,經常網上的查閱,我決定淘汰這個語法~

其實就是前面where之后,想要分組的結果顯示不符合where的數據,當然,不做運算,運算結果用0或null表示,感覺這語法沒啥用,想不出應用場景~

二、深入學習 連接

連接分4種,內連接,全連接,左外連接,右外連接

1、連接出現的地方

①from和where之間,做表和表的連接

②where和having之間,having是對group by的結果集進行篩選,就是把group by的結果集作為一張表,然后可以再和別的表做連接,再進一步篩選

2、連接類型解讀

把表看成是一個集合,連接看成是映射,那么它們的結果

內連接:一一映射;全連接:笛卡爾乘積;左外連接:一一映射+左表對應右表的null;右外連接:一一映射+右表對應左表的null。

關鍵字:

內連接:inner join;全連接:cross join;左外連接:left join;右外連接:right join 。

語法:

表a left join 表b on a.列1 = b.列2

3、連接的使用

之前學習group by的例子中,結果集是存在bug的。

例:查詢每個學院的學生有多少人:(學院的值是學院的id),在沒有連接的時候,學院人數為0的是顯示不出來的,因為當前表中就沒有這個學院的信息

那么我們在這里做一下左連接(左外連接):

SELECT c.ID, a.COLLEGE, COUNT(a.COLLEGE) FROM (SELECT ID FROM dic_college) c LEFT JOIN ( SELECT COLLEGE FROM base_alumni ) a ON c.ID = a.COLLEGE GROUP BY c.ID

我這里是一個完整的語句了。我在寫出這條語句之前遇到了許多的磕磕碰碰。

解讀它:

我們先把學院表和校友信息表(學生表)做左連接

因為我們要的是學院,所以學院作為主表,放left join的前面 c LEFT JOIN a ON ...

然后我們發現有很多字段,于是我們去掉多余的字段,這樣既方便我們觀察,也提高了sql的執行效率

①把學院表變成只有一個字段(SELECT ID FROM dic_college) c

②把學生表變成只有一個字段( SELECT COLLEGE FROM base_alumni ) a

這時,查詢結果是這樣的

SELECT * FROM (SELECT ID FROM dic_college) c LEFT JOIN ( SELECT COLLEGE FROM base_alumni ) a ON c.ID = a.COLLEGE

MySQL,分組,鏈接

這時候,對這個結果集進行分組:GROUP BY c.ID,并且查詢字段要做更改

在上邊那個結果集中,c.ID和a.COLLEGE是一一對應的,此時,count(*)的數據是總行數,因為我們的主表是學院表,所以這個數據和count(c.ID)的數據是一樣的。

但是a.COLLEGE為空的行的數據中值都是1,這不是我們想要的,所以我們把count(*)改成count(a.COLLEGE),這樣數據就出來了。

MySQL,分組,鏈接

這才是查詢所有學院中每個學院的學生人數的正確答案!當然,上邊的截圖只是數據的前幾行,后面還有數據的

4、經過我測試了一下

左連接和右連接……

SELECT * FROM a LEFT JOIN b ON b.ID = a.FK_ID;

SELECT * FROM b RIGHT JOIN a ON b.ID = a.FK_ID;

這兩個語句的結果相同,它兩并沒有發現別的區別。

全連接就是交叉連接,和不使用連接……

SELECT * FROM c,a WHERE c.ID = a.FK_ID;

SELECT * FROM c CROSS JOIN a ON c.ID = a.FK_ID;

這兩個語句也沒有區別。

以上就是本篇關于MYSQL分組和鏈接深入詳解的全部內容,如果大家還有任何不明白的地方可以在下方留言區討論。

 

注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩在线观看免费网站| 久久久久免费精品国产| 在线播放亚洲激情| 国产欧美一区二区白浆黑人| 国产91精品青草社区| 538国产精品视频一区二区| 国产精品中文在线| 亚洲最大成人免费视频| 亚洲国产精品电影| 亚洲最大的免费| 欧美日产国产成人免费图片| 精品动漫一区二区| 国产精品爽爽爽爽爽爽在线观看| 亚洲自拍偷拍色片视频| 亚洲视频在线看| 久久久亚洲国产| 欧美精品一二区| 亚洲国内精品视频| 久久在线观看视频| 国模视频一区二区| 欧美专区第一页| 不用播放器成人网| 精品色蜜蜜精品视频在线观看| 中文字幕亚洲天堂| 国产精品美女免费视频| 国产精品视频精品| 日韩中文字幕国产精品| 久久精品一偷一偷国产| 成人做爰www免费看视频网站| 久久久亚洲国产天美传媒修理工| 91人成网站www| 欧美疯狂做受xxxx高潮| 亚洲激情在线观看视频免费| 日韩在线视频观看正片免费网站| 97在线视频免费看| 国产精品午夜视频| 国外成人在线播放| 国产一区二区三区免费视频| 福利一区福利二区微拍刺激| 精品国产乱码久久久久久虫虫漫画| 日韩欧美aⅴ综合网站发布| 亚洲激情在线观看视频免费| 久久久久久久久久久网站| 国产精品美女久久久久久免费| 欧美激情一二区| 一本大道久久加勒比香蕉| 欧美午夜无遮挡| 精品一区二区三区三区| 欧美激情亚洲另类| 欧美成人免费全部| 亚洲精品自拍第一页| 亚洲最大成人网色| 国产精品成人va在线观看| 亚洲欧美国产高清va在线播| 亚洲欧美日本精品| 91夜夜揉人人捏人人添红杏| 一区二区三区四区精品| 日韩在线视频观看正片免费网站| 亚洲乱码一区av黑人高潮| 国产欧美最新羞羞视频在线观看| 26uuu另类亚洲欧美日本一| 国产精品网红福利| 国产精品视频1区| 亚洲综合成人婷婷小说| 成人性生交xxxxx网站| 18久久久久久| 大荫蒂欧美视频另类xxxx| 69精品小视频| 国产福利精品视频| 91成品人片a无限观看| 欧美日韩成人在线观看| 久久视频国产精品免费视频在线| 成人午夜激情网| 91精品视频观看| 久久综合色影院| 国产精品久久久久久久美男| 91精品国产九九九久久久亚洲| 亚洲成人久久久久| 欧美猛少妇色xxxxx| 91中文字幕在线观看| 欧美精品激情在线| 一本一道久久a久久精品逆3p| 久久99亚洲精品| 久久久精品在线| 国产精品综合网站| 国产精品香蕉av| 91社区国产高清| 午夜精品一区二区三区在线| 91经典在线视频| 78色国产精品| 国产美女精品视频免费观看| 色阁综合伊人av| 成人精品一区二区三区电影免费| 日韩最新在线视频| 国产精品美女视频网站| 欧美大片免费观看在线观看网站推荐| 日韩一区二区三区国产| 国产精品久久久久久久久久久久久久| 亚洲第一区中文99精品| 欧美韩日一区二区| 国产一区二区三区视频在线观看| 国产精品电影在线观看| 欧美专区第一页| 日韩在线观看精品| 亚洲欧美成人一区二区在线电影| 中文字幕自拍vr一区二区三区| 日韩欧美在线一区| 久久久亚洲国产天美传媒修理工| 91在线网站视频| 国产精品亚洲片夜色在线| 国产精品久久久久久久7电影| 在线电影中文日韩| 97在线视频免费看| 亚洲欧美日韩精品久久亚洲区| 国产精品激情av在线播放| 国产精品免费小视频| 亚洲精品电影网在线观看| 日韩国产精品一区| 色久欧美在线视频观看| 国产精品99免视看9| 成人黄色免费网站在线观看| 欧美一级淫片播放口| 日韩av色在线| 中文字幕亚洲欧美日韩高清| 亚洲福利影片在线| 国产精品一区二区三区成人| 色琪琪综合男人的天堂aⅴ视频| 欧美日韩性视频在线| 北条麻妃99精品青青久久| y97精品国产97久久久久久| 日韩欧美国产骚| 美女撒尿一区二区三区| 亚洲欧美一区二区三区情侣bbw| 久久久亚洲国产天美传媒修理工| 久热精品视频在线免费观看| 欧美丰满少妇xxxxx| 色七七影院综合| 久久人人爽人人爽爽久久| 国模gogo一区二区大胆私拍| 伊人伊成久久人综合网站| 亚洲男人的天堂在线播放| 欧美性xxxxxxxxx| 欧美在线亚洲一区| 久久精品中文字幕电影| 精品视频在线播放色网色视频| 国产网站欧美日韩免费精品在线观看| 色与欲影视天天看综合网| 欧美激情小视频| 麻豆乱码国产一区二区三区| 欧美日韩国产黄| 亚洲国产精品久久| 91在线观看免费网站| 亚洲欧美国产精品va在线观看| 国产成人涩涩涩视频在线观看| 中文在线资源观看视频网站免费不卡| 亚洲毛片一区二区| 亚洲国产另类 国产精品国产免费| 久久777国产线看观看精品| 性欧美亚洲xxxx乳在线观看| 欧美影院在线播放| 国产精品视频网址| 日本精品中文字幕| 亚洲精品国产精品乱码不99按摩| 亚洲国产精品久久91精品|