圖說SQL Join

原文:圖說SQL Join

如果你也曾經(jīng)被SQL語言中各種Join操作:Left Join, Right Join, Inner Join等搞暈了頭,那么這篇文章比較適合你。本文通過維恩圖演示各種Join語句的執(zhí)行效果,簡單直白容易記憶。
假如有兩張表 Table ATable B, 表數(shù)據(jù)如下:
Table A:

id name
1 Pirate
2 Monkey
3 Ninja
4 Spaghetti

Table B:

id name
1 Rutabaga
2 Pirate
3 Darth Vader
4 Ninja

下面我們來看看各種Join的執(zhí)行效果

1. INNER JOIN

Inner Join會(huì)根據(jù)Join的On條件拿左表(Table A)的行與右表(Table B)的行進(jìn)行匹配, 只有當(dāng)左右表中 至少同時(shí) 存在一條匹配數(shù)據(jù)時(shí)才返回到結(jié)果集. 也就是說Inner Join求的是兩個(gè)表之間的交集.

SELECT * FROM TableA
INNER JOIN TableB
ON TableA.name = TableB.name

結(jié)果集:

id name id name
1 Pirate 2 Pirate
2 Ninja 4 Ninja

2. Full JOIN

在某些數(shù)據(jù)庫中, FULL JOIN被稱之為FULL OUTER JOIN (注意: MySQL不支持帶ON條件的FULL JOIN, 也不支持FULL OUTER JOIN關(guān)鍵字). FULL OUTER JOIN關(guān)鍵字會(huì)從左表(Table A)和右表(Table B)中返回所有符合條件的行, 如果Table A中的行在Table B中沒有匹配或者Table B中的行在Table A中沒有匹配, 則相關(guān)列返回NULL.

SELECT * FROM TableA
FULL OUTER JOIN TableB
ON TableA.name = TableB.name

結(jié)果集:

id name id name
1 Pirate 2 Pirate
2 Monkey null null
3 Ninja 4 Ninja
4 Spaghetti null null
null null 1 Rutabaga
null null 3 Darth Vader

另外一個(gè)例子:

SELECT * FROM TableA
FULL OUTER JOIN TableB
ON TableA.name = TableB.name
WHERE TableA.id IS null
OR TableB.id IS null

結(jié)果集:

id name id name
2 Monkey null null
4 Spaghetti null null
null null 1 Rutabaga
null null 3 Darth Vader

3. LEFT JOIN

LEFT JOIN在某些數(shù)據(jù)庫中稱之為LEFT OUTER JOIN. 該關(guān)鍵字會(huì)從左表中返回所有符合條件的行, 并且如果右表有匹配的行則一并返回, 如果右表中沒找到匹配的行, 則與右表相關(guān)的結(jié)果列返回NULL

SELECT * FROM TableA
LEFT OUTER JOIN TableB
ON TableA.name = TableB.name

結(jié)果集:

id name id name
1 Pirate 2 Pirate
2 Monkey null null
3 Ninja 4 Ninja
4 Spaghetti null null

另外一個(gè)例子:

SELECT * FROM TableA
LEFT OUTER JOIN TableB
ON TableA.name = TableB.name
WHERE TableB.id IS null

結(jié)果集:

id name id name
2 Monkey null null
4 Spaghetti null null

4. RIGHT JOIN

RIGHT JOIN在某些數(shù)據(jù)庫中稱之為RIGHT OUTER JOIN, 與LEFT JOIN相反, 該關(guān)鍵字返回右表中所有符合條件的行, 并且如果左表有匹配的行則一并返回, 如果左表沒找到匹配的行, 則與左表相關(guān)的結(jié)果列返回NULL。
由于RIGHT JOIN的原理與LEFT JOIN大致相同, 這里就不再贅述。

參考文章

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容