透過經典 pubs 範例資料庫,實地觀察三種外聯接的結果集差異。
authors:作者表 (含 city)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 列。21 位作者無同城出版社 → pub_name = NULL;2 位有匹配顯示出版社名。
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 列。2 位作者匹配 1 間出版社 (Algodata);其餘 8 間出版社無同城作者 → 作者欄位 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;
ON 子句加入 s.qty > 50,銷量 ≤ 50 的書名仍保留 (因 RIGHT JOIN),但銷售欄位為 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 (LEFT) + 8 (RIGHT 獨有出版社) = LEFT ∪ RIGHT。
LEFT OUTER JOIN),避免舊式 *= / =* 產生歧義ON 子句謂詞可精準控制保留列的關聯條件