程式扎記: [ MySQL 小學堂 ] Inner/Left/Right/Full join 說明

標籤

2012年8月27日 星期一

[ MySQL 小學堂 ] Inner/Left/Right/Full join 說明


參考自 這裡
前言 :
這邊對數據庫中容易搞混的 Inner/Left/Right/Full join 使用進行簡單介紹. 首先假設我們有兩個 Table :
- Table test1 :


- Table test2:


接著下面的說明會以這兩個Tables 當作範例.

SQL INNER JOIN Keyword :
使用 INNER JOIN table_name ON condition 確保兩個 join 的表格至少有一個欄位會是相同. 例如我們要找出 'test1' 中的欄位 id 有在 'test2' 中的 pid 欄位出現, 並列出 id, name, phone 與country 欄位訊息, 可以如下操作 :


這樣子出現的集合式在 'test1' 與 test2' 中必須是 test1.id 與 test.pid 都存在且相等, 才會回傳.

SQL LEFT JOIN Keyword :
使用 LEFT JOIN table_name ON condition 將只要左邊的表格有的紀錄都輸出到結果集中. 以前一個範例並將 "INNER JOIN" 換成 "LEFT JOIN" 的結果如下 :


可以發現 id=4 的紀錄在 'test1' 中有但是在 'test2' 中沒有對應的 pid, 因此欄位 country 為 NULL.

SQL RIGHT JOIN Keyword :
使用 RIGHT JOIN table_name ON condition 將只要右邊的表格有的紀錄都輸出到結果集中. 以 INNER JOIN 的範例並將 "INNER JOIN" 換成 "RIGHT JOIN" 並新增欄位 "pid" 的結果如下 :


可以發現這次是右邊 'test2' 的紀錄都有在結果集, 但是在 pid=5 的紀錄應為沒有對應的 'test1' 的紀錄 (pid=id=5), 故 id, name, phone 為 NULL.

SQL FULL JOIN Keyword :
至於 FULL JOIN, 它是 LEFT JOIN 與 RIGHT JOIN 的聯集. 但我使用 MySQL當作示範而它沒有支援 FULL JOIN, 故我改用 UNION 來模擬同樣的結果 :


補充說明 :
w3schools.com : SQL Joins
SQL joins are used to query data from two or more tables, based on a relationship between certain columns in these tables...

w3schools.com : SQL INNER JOIN Keyword
The INNER JOIN keyword return rows when there is at least one match in both tables...

w3schools.com : SQL LEFT JOIN Keyword
The LEFT JOIN keyword returns all rows from the left table (table_name1), even if there are no matches in the right table (table_name2)...

w3schools.com : SQL FULL JOIN Keyword
The FULL JOIN keyword return rows when there is a match in one of the tables...
This message was edited 25 times. Last update was at 27/08/2012 17:43:43

沒有留言:

張貼留言

網誌存檔

關於我自己

我的相片
Where there is a will, there is a way!