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

SQL 教程 (7):LEFT / RIGHT / FULL JOIN 外部聯接完全指南 — 含 NULL 值處理

     編輯:關於SqlServer

內聯接 只回傳雙邊匹配的列;外部聯接保留單邊或雙邊不匹配的列。本文以蘇格蘭議會「政黨」與「議員」表為例,詳細講解 LEFT/RIGHT/FULL JOIN 行為差異,並補充 NULL 判斷規則 (IS NULL / IS NOT NULL)。

資料結構

  • party(Code, Name, Leader):Code=政黨代碼,Leader=領袖 (可為 NULL)
  • msp(Name, Party, Constituency):Party=所屬政黨代碼 (可為 NULL,表示無黨籍)

NULL 值判斷鐵律

-- 正確
WHERE Leader IS NULL
WHERE Party IS NOT NULL
-- 錯誤 (NULL 不等於任何值,含自身)
WHERE Leader = NULL
WHERE Party <> NULL

內聯接 (JOIN / INNER JOIN) 缺失示範

SELECT msp.Name, party.Name
FROM msp JOIN party ON msp.Party = party.Code;

結果遺漏 無黨籍議員 (Party IS NULL) 及 無議員政黨,因 NULL 無法匹配。

LEFT JOIN:保留左表所有列

SELECT msp.Name, party.Name
FROM msp LEFT JOIN party ON msp.Party = party.Code;

結果:所有議員 (含無黨籍) 皆顯示;無黨籍議員的 party.Name 為 NULL。

RIGHT JOIN:保留右表所有列

SELECT msp.Name, party.Name
FROM msp RIGHT JOIN party ON msp.Party = party.Code;

結果:所有政黨 (含無議員) 皆顯示;無議員政黨的 msp.Name 為 NULL。

FULL JOIN:保留雙邊所有列

SELECT msp.Name, party.Name
FROM msp FULL JOIN party ON msp.Party = party.Code;

結果:無黨籍議員 + 無議員政黨 全部顯示,不匹配處為 NULL。

選擇指南

需求聯接類型
只需雙邊匹配INNER JOIN
主表 (左) 全保留,從表可無LEFT JOIN
從表 (右) 全保留,主表可無RIGHT JOIN
雙邊全保留,不匹配也要看FULL JOIN

慣例:以「主表」為左表,習慣用 LEFT JOIN,避免 RIGHT JOIN 降低可讀性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved