SQL資料表之JOIN指令圖解介紹

SQL除了四大指令CRUD(Create, read, update and delete)之外,最讓初學者頭痛的就是JOIN了,兩張資料表的鍵值在那邊交集來聯集去的,頭昏眼花是常有的事,因此寫下這篇文章,利用圖型來簡單表達一下JOIN的概念。

假設有Table_A, Table_B這兩資料表,資料分別如下表所示:(打星號*表示資料是重疊的)

SELECT [iIndex], [cName] FROM [Table_A]
---------------------------------------
iIndex  cName
1       關羽*
2       張飛
3       趙雲*
4       魏延

SELECT [iIndex], [cName] FROM [Table_B]
---------------------------------------
iIndex  cName
1       劉備
2       關羽*
3       曹操
4       趙雲*

完整聯集:FULL OUTER JOIN

這個部份表示兩張資料表的全部資料都要了!請見下圖圖示:

使用指令與結果:
/*** JOIN TEST 01 ***/
SELECT *
FROM Table_A
FULL OUTER JOIN Table_B
ON Table_A.cName = Table_B.cName

完整交集:INNER JOIN

這個部份表示兩張資料表裡面,確定彼此都存在的資料我才要,其它各自只出現在自己的表中的資料全部都不要!請見下圖圖示:

使用指令與結果:
/*** JOIN TEST 02 ***/
SELECT *
FROM Table_A
INNER JOIN Table_B
ON Table_A.cName = Table_B.cName

部份聯集與完整交集:LEFT OUTER JOIN

這個部份表示在Table_A的資料我全要,但是在Table_B裡有出現在Table_A的資料我也要!請見下圖圖示:

使用指令與結果:
/*** JOIN TEST 03 ***/
SELECT *
FROM Table_A
LEFT OUTER JOIN Table_B
ON Table_A.cName = Table_B.cName

部份聯集:LEFT OUTER JOIN - Table_B IS NULL

這個部份表示在Table_A的資料我全要,但是在Table_B裡有出現在Table_A的資料在結果中剃除!請見下圖圖示:

使用指令與結果:
/*** JOIN TEST 04 ***/
SELECT *
FROM Table_A
LEFT OUTER JOIN Table_B
ON Table_A.cName = Table_B.cName
WHERE Table_B.iIndex IS NULL

部份聯集:LEFT OUTER JOIN - Table_A OR Table_B IS NULL

這個部份表示在Table_A與Table_B的資料我全要,但是Table_A與Table_B中共同擁有的資料我不要!請見下圖圖示:

使用指令與結果:
/*** JOIN TEST 05 ***/
SELECT *
FROM Table_A
FULL OUTER JOIN Table_B
ON Table_A.cName = Table_B.cName
WHERE Table_A.iIndex IS NULL OR Table_B.iIndex IS NULL

以上大概就是JOIN所有可能用到的情況,當然如果你是要取Table_B那一邊的,請自己把FROM Table的前後對調一下就可以了,大家應該可以舉一反三才是。

SQL Command InnerJoin OuterJoin LeftOuterJoin FullOuterJoin