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的前後對調一下就可以了,大家應該可以舉一反三才是。
留言