設左表 R、右表 S,連接條件 R.key = S.key:
| 連接類型 | 結果集組成 | 無對應時的 NULL 來源 | Venn 圖示意 |
|---|---|---|---|
| INNER JOIN (內連接) |
僅保留 雙方皆符合條件 的列組合 | 無 NULL 補充 (不匹配列直接捨棄) | R ∩ S (交集) |
| LEFT OUTER JOIN (左外連接) |
內連接結果 + 左表 R 中無匹配的列 | 右表 S 所有欄位為 NULL | R 全集 (左圓完整) |
| RIGHT OUTER JOIN (右外連接) |
內連接結果 + 右表 S 中無匹配的列 | 左表 R 所有欄位為 NULL | S 全集 (右圓完整) |
| FULL OUTER JOIN (完整外連接) |
內連接結果 + R 無匹配列 + S 無匹配列 | 雙向補 NULL:R 無匹配時 S 列為 NULL;S 無匹配時 R 列為 NULL | R ∪ S (並集) |
IS NOT NULL 或 = 'value',會隱性將 OUTER JOIN 轉為 INNER JOIN (因 NULL 不通過比較)。ON 子句:LEFT JOIN S ON R.key = S.key AND S.status = 'Active'。IS NULL 判斷,而非 = NULL。-- SQL Server 舊式外連接 (*=, =*)
SELECT * FROM R, S WHERE R.key *= S.key -- LEFT JOIN
SELECT * FROM R, S WHERE R.key =* S.key -- RIGHT JOIN
ANSI SQL-92 標準語法 (LEFT JOIN ... ON) 可攜性強、語意清晰、支援複雜條件,請全面採用。