MySQL由淺入深掌握連接查詢
數(shù)據(jù)庫版本:mysql8。0.27
內(nèi)連接
- 內(nèi)連接INNERJOIN是最常用的連接操作。從數(shù)學(xué)的角度講就是求兩個表的交集,從笛卡爾積的角度講就是從笛卡爾積中挑出ON子句條件成立的記錄。
- 在我看來內(nèi)連接和等值連接差不多,自然連接是內(nèi)連接中的一個特殊連接
自然連接和等值連接的區(qū)別
什么是自然連接?
- 自然連接(Naturaljoin)是一種特殊的等值連接,它要求兩個關(guān)系中進(jìn)行比較的分量必須是相同的屬性組,并且在結(jié)果中把重復(fù)的屬性列去掉。
什么是等值連接?
- 等值連接是關(guān)系運(yùn)算-連接運(yùn)算的一種常用的連接方式。是條件連接(或稱θ連接)在連接運(yùn)算符為“=”號時,即θ=0時的一個特例
舉例分析:
表aaa

表bbb:

查詢表aaa和表bbb中屬性C B D相等的數(shù)據(jù)
等值連接查詢:
SElect*from aaa,bbb WHERE aaa.C=bbb.C and aaa.D=bbb.D and aaa.E=bbb.E
結(jié)果:

自然連接查詢:
-- 自然連接用關(guān)鍵字 natural join SELECT*from aaa natural join bbb;
結(jié)果:

由上面兩個結(jié)果可以看出,等值連接就是從兩個表數(shù)據(jù)的交集中取指定值相等的數(shù)據(jù)。而自然連接就是取兩個表中相同屬性,并且值相等的數(shù)據(jù),而且消除了相同屬性列。
內(nèi)連接的實(shí)現(xiàn)方式
第一種:where
SElect*from aaa,bbb WHERE aaa.C=bbb.C and aaa.D=bbb.D and aaa.E=bbb.E
第二種:inner join
select*from aaa inner join bbb on aaa.C=bbb.C and aaa.D=bbb.D and aaa.E=bbb.E;
第三種:join
select*from aaa join bbb on aaa.C=bbb.C and aaa.D=bbb.D and aaa.E=bbb.E;
第四種:STRAIGHT_JOIN
select*from aaa STRAIGHT_JOIN bbb on aaa.C=bbb.C and aaa.D=bbb.D and aaa.E=bbb.E;
后面三種效果一樣,第三種可以理解為第二種的縮寫。第四種和第二種主要區(qū)別是插入方式不同,第四種性能略低
外連接
- 外連接分為三種:左外連接,右外連接,全外連接。對應(yīng)SQL:LEFT/RIGHT/FULL OUTER JOIN。
左連接
什么是左連接?
左連接LEFT JOIN的含義就是求兩個表A表和B表的交集外加左表剩下的數(shù)據(jù)。依舊從笛卡爾積的角度講,就是先從笛卡爾積中挑出ON子句條件成立的記錄,然后加上左表A表中剩余的記錄

代碼實(shí)現(xiàn):
select*from aaa left join bbb on aaa.C=bbb.C and aaa.D=bbb.D and aaa.E=bbb.E;
結(jié)果:

右連接
什么是左連接?
- 同理右連接RIGHT JOIN就是求兩個表A和B表的交集外加右表B剩下的數(shù)據(jù)。再次從笛卡爾積的角度描述,右連接就是從笛卡爾積中挑出ON子句條件成立的記錄,然后加上右表中剩余的記錄

代碼實(shí)現(xiàn):
select*from aaa right join bbb on aaa.C=bbb.C and aaa.D=bbb.D and aaa.E=bbb.E;
結(jié)果:

全連接
全外連接就是求兩個表A和B集合的并集。從笛卡爾積的角度講就是從笛卡爾積中挑出ON子句條件成立的記錄,然后加上左表中剩余的記錄,最后加上右表中剩余的記錄。另外MySQL不支持OUTER JOIN,但是我們可以對左連接和右連接的結(jié)果做 UNION 操作來實(shí)現(xiàn)。

代碼實(shí)現(xiàn):
select*from aaa left join bbb on aaa.C=bbb.C and aaa.D=bbb.D and aaa.E=bbb.E union select*from aaa right join bbb on aaa.C=bbb.C and aaa.D=bbb.D and aaa.E=bbb.E
結(jié)果:

到此這篇關(guān)于MySQL由淺入深掌握連接查詢的文章就介紹到這了,更多相關(guān)MySQL 連接查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL中TO_DAYS()函數(shù)詳解與實(shí)際應(yīng)用舉例
TO_DAYS函數(shù)是指從零開始到函數(shù)內(nèi)時間的天數(shù),下面這篇文章主要給大家介紹了關(guān)于MySQL中TO_DAYS()函數(shù)詳解與實(shí)際應(yīng)用的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-04-04
解決mysql數(shù)據(jù)庫設(shè)置遠(yuǎn)程連接權(quán)限執(zhí)行g(shù)rant all privileges on&n
這篇文章主要介紹了解決mysql數(shù)據(jù)庫設(shè)置遠(yuǎn)程連接權(quán)限執(zhí)行g(shù)rant all privileges on *.* to 'root'@'%' identified by '密碼' with grant optio報(bào)錯,通過本文給大家分享問題原因解析及解決方法,需要的朋友可以參考下2022-11-11
MySQL中ADD?COLUMN添加多個字段的寫法實(shí)例
這篇文章主要給大家介紹了關(guān)于MySQL中ADD?COLUMN添加多個字段的寫法實(shí)例,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-02-02
mysql 5.7 docker 主從復(fù)制架構(gòu)搭建教程
這篇文章主要為大家詳細(xì)介紹了mysql 5.7 docker 主從復(fù)制架構(gòu)搭建教程,感興趣的小伙伴們可以參考一下2016-07-07

