| 類型 | 關鍵字 | 結果集包含 |
|---|---|---|
| 內部聯結 | INNER JOIN | 雙方皆符合 ON 條件的列 |
| 左外部聯結 | LEFT [OUTER] JOIN | 左表所有列 + 右表匹配列 (無匹配則 NULL) |
| 右外部聯結 | RIGHT [OUTER] JOIN | 右表所有列 + 左表匹配列 (無匹配則 NULL) |
| 完整外部聯結 | FULL [OUTER] JOIN | 雙表所有列,無匹配處填 NULL |
SQL-92 標準關鍵字:LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN。舊式 *=, =* 易產生歧義,不建議使用。
authors (作者) 與 publishers (出版社) 以 city 聯結。
SELECT a.au_fname, a.au_lname, p.pub_name
FROM authors a LEFT OUTER JOIN publishers p ON a.city = p.city
ORDER BY p.pub_name, a.au_lname, a.au_fname
結果:23 列。未同城作者的 pub_name 為 NULL。
SELECT a.au_fname, a.au_lname, p.pub_name
FROM authors a RIGHT OUTER JOIN publishers p ON a.city = p.city
ORDER BY p.pub_name, a.au_lname, a.au_fname
結果:9 列。無同城作者的出版社顯示 au_fname/lname = NULL。
SELECT s.stor_id, s.qty, t.title
FROM sales s RIGHT OUTER JOIN titles t ON s.title_id = t.title_id AND s.qty > 50
ORDER BY s.stor_id
AND s.qty > 50 放在 ON 子句中,不影響右表保留;若放在 WHERE 會轉為內部聯結。
SELECT a.au_fname, a.au_lname, p.pub_name
FROM authors a FULL OUTER JOIN publishers p ON a.city = p.city
ORDER BY p.pub_name, a.au_lname, a.au_fname
結果:30 列 = 左表 23 + 右表 9 - 交集 2。
INNER JOIN,明確需要保留單邊資料才用 OUTER JOIN。NULL 來源:是資料缺失還是聯結不上,避免業務邏輯錯誤。