首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

JOIN 實戰教學:以 pubs 資料庫示範 LEFT/RIGHT/FULL OUTER JOIN 差異

     編輯:關於SqlServer

透過經典 pubs 範例資料庫,實地觀察三種外聯接的結果集差異。

資料準備

  • authors:作者表 (含 city)
  • publishers:出版社表 (含 city)
  • 內聯接僅返回同城作者與出版社 (2 筆)

LEFT OUTER JOIN:保留所有作者

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 位有匹配顯示出版社名。

RIGHT OUTER JOIN:保留所有出版社

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。

FULL OUTER JOIN:保留作者與出版社雙方

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。

語法建議

  • 優先使用 SQL-92 標準語法 (LEFT OUTER JOIN),避免舊式 *= / =* 產生歧義
  • 外聯接配合 ON 子句謂詞可精準控制保留列的關聯條件
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved