內聯接 只回傳雙邊匹配的列;外部聯接保留單邊或雙邊不匹配的列。本文以蘇格蘭議會「政黨」與「議員」表為例,詳細講解 LEFT/RIGHT/FULL JOIN 行為差異,並補充 NULL 判斷規則 (IS NULL / IS NOT NULL)。
party(Code, Name, Leader):Code=政黨代碼,Leader=領袖 (可為 NULL)msp(Name, Party, Constituency):Party=所屬政黨代碼 (可為 NULL,表示無黨籍)-- 正確 WHERE Leader IS NULL WHERE Party IS NOT NULL -- 錯誤 (NULL 不等於任何值,含自身) WHERE Leader = NULL WHERE Party <> NULL
SELECT msp.Name, party.Name FROM msp JOIN party ON msp.Party = party.Code;
結果遺漏 無黨籍議員 (Party IS NULL) 及 無議員政黨,因 NULL 無法匹配。
SELECT msp.Name, party.Name FROM msp LEFT JOIN party ON msp.Party = party.Code;
結果:所有議員 (含無黨籍) 皆顯示;無黨籍議員的 party.Name 為 NULL。
SELECT msp.Name, party.Name FROM msp RIGHT JOIN party ON msp.Party = party.Code;
結果:所有政黨 (含無議員) 皆顯示;無議員政黨的 msp.Name 為 NULL。
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 降低可讀性。