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

SQL 進階教學:LEFT/RIGHT/FULL OUTER JOIN 外部連接完整解析

     編輯:關於SqlServer

內連接的缺口

INNER JOIN 僅回傳雙方都匹配的列。若左表有列無右表匹配(或反之),該列會消失。

NULL 值先備知識

  • NULL ≠ 空字串 ≠ 數字 0,代表「未知」或「不存在」。
  • 判斷 NULL 必須用 IS NULL / IS NOT NULL,不可用 = / <>。
-- 無領導者的政黨
SELECT code, name FROM party WHERE leader IS NULL;

-- 被開除黨籍的議員(party 為 NULL)
SELECT name FROM msp WHERE party IS NULL;

案例模型:蘇格蘭議會

表欄位
partyCode(政黨代碼), Name(政黨名稱), Leader(領袖)
mspName(議員姓名), Party(所屬政黨代碼), Constituency(選區)

內連接遺漏資料示範

SELECT msp.name, party.name
FROM msp JOIN party ON msp.party = party.code;

結果缺少:無黨籍議員(Canavan MSP, Dennis),因 msp.party IS NULL 無法與 party.code 匹配。

三種外部連接語法與效果

連接類型語法保留哪邊的所有列適用場景
LEFT JOINFROM msp LEFT JOIN party ON ...左表主表為主,輔表可能無資料(如:所有議員+其政黨)
RIGHT JOINFROM msp RIGHT JOIN party ON ...右表輔表為主,主表可能無資料(如:所有政黨+其議員)
FULL JOINFROM msp FULL JOIN party ON ...雙邊雙方都要完整保留(如:議員與政黨雙向完整清單)

實戰語句

左連接:所有議員(含無黨籍)

SELECT msp.name, party.name
FROM msp LEFT JOIN party ON msp.party = party.code;

右連接:所有政黨(含無議員)

SELECT msp.name, party.name
FROM msp RIGHT JOIN party ON msp.party = party.code;

全連接:議員與政黨雙向完整

SELECT msp.name, party.name
FROM msp FULL JOIN party ON msp.party = party.code;

記憶口訣

LEFT = 保留左邊、RIGHT = 保留右邊、FULL = 兩邊都保留。ON 條件決定如何匹配,不匹配處以 NULL 填補。

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