| 類型 | 關鍵字 | 結果集特徵 |
|---|---|---|
| 左向外連接 | LEFT JOIN / LEFT OUTER JOIN | 左表所有行 + 右表匹配行(無匹配則 NULL) |
| 右向外連接 | RIGHT JOIN / RIGHT OUTER JOIN | 右表所有行 + 左表匹配行(無匹配則 NULL) |
| 完整外連接 | FULL JOIN / FULL OUTER JOIN | 兩表所有行(雙向無匹配均填 NULL) |
僅返回雙方均匹配的行,非匹配行被過濾。
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 行,僅 2 位作者匹配出版社,其餘 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 行,7 家出版社無匹配作者 → 作者欄位 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;
銷量 ≤ 50 的書名仍保留(來自 titles),但 stor_id/qty = NULL。
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 匹配 = 30(驗證集合論)。
💡 MySQL 不支援 FULL OUTER JOIN,可用
LEFT JOIN UNION RIGHT JOIN模擬。本文案例基於 SQL Server,語法標準通用。