[SQL] JOIN Types
SQL join其實滿好懂的,下面有圖說,這邊紀錄最常用的幾種JOIN。(我覺得stackoverflow上解釋的英文寫得比中文好懂)
基本語法
SQL JOIN 系列用來比較兩張表,可以搭配上面的圖解一起看。
用 FROM 跟 JOIN 把兩個資料表關聯起來,使用 ON 後面的條件說明是用什麼關係來關聯 :
SELECT 要顯示的資料欄位
FROM 主要表單
JOIN 被關聯表單
ON 兩者關連的條件
(INNER) JOIN
INNER JOIN aka JOIN 兩個都可以,意思一樣,下面的OUTER JOIN也是
only where both tables match.
只列出兩張表有交集的資料列
SELECT table_column1, table_column2...
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name;
LEFT (OUTER) JOIN
Returns all records from the left table, and the matched records from the right table.
返回左表中的所有資料列,以及右表中能夠匹配的列,有空值會顯示NULL
SELECT table_column1, table_column2...
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name;
RIGHT (OUTER) JOIN
Returns all records from the right table, and the matched records from the left table.
返回右表中的所有資料列,以及左表中能夠匹配的列,有空值會顯示NULL
SELECT table_column1, table_column2···
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name;
小結
基本上主要表單就是會被全表遍歷一輪的表單,依據想要關聯的條件,在主要表單的後面接上被關聯表單的內容,就算被關聯表單沒有符合也會以NULL的方式顯示。
以LEFT JOIN舉例,拆開來步驟就像是:
- 從 A 表看第一行內容中的 a 欄位內容
- 從 B 表找到滿足關聯條件的行
- 把 B 表中滿足條件的行跟 A 表 a 欄位合成同一行,如果 B 表中沒有滿足條件的行,就填NULL
- 繼續看 A 表第二行,重複一直到 A 表都看完
因為 A 表每一行都會被掃過一次,所以通常會選比較小的那個表單來當主要表單畢竟要被輪一遍,從小一點的開始比較快。