表連接是 SQL 查詢的核心。本文詳細說明 Oracle 內連接、左/右/全外連接、交叉連接的語法差異、結果集特性,並提供 ANSI 標準與 Oracle 傳統語法對照,助你精準控制資料組合邏輯。
| 連接類型 | ANSI 標準語法 | Oracle 傳統語法 (+) | 結果集特性 |
|---|---|---|---|
| 內連接 | INNER JOIN ... ON | WHERE a.id = b.id | 僅返回雙方符合條件的行 |
| 左外連接 | LEFT [OUTER] JOIN ... ON | WHERE a.id = b.id(+) | 左表全保留,右表無配對填 NULL |
| 右外連接 | RIGHT [OUTER] JOIN ... ON | WHERE a.id(+) = b.id | 右表全保留,左表無配對填 NULL |
| 全外連接 | FULL [OUTER] JOIN ... ON | 不支援 (需 UNION 實現) | 雙表全保留,無配對填 NULL |
| 交叉連接 | CROSS JOIN | 無對應語法 | 笛卡兒積,行數 = 左行數 × 右行數 |
-- ANSI 標準 (推薦)
SELECT * FROM mt_pb_org o
LEFT JOIN mt_pb_orgframe f ON o.PB_ORGFRAMEID = f.PB_ORGFRAMEID;
-- Oracle 傳統語法
SELECT * FROM mt_pb_org o, mt_pb_orgframe f
WHERE o.PB_ORGFRAMEID = f.PB_ORGFRAMEID(+);
SELECT * FROM mt_pb_org o
RIGHT JOIN mt_pb_orgframe f ON o.PB_ORGFRAMEID = f.PB_ORGFRAMEID;
SELECT * FROM mt_pb_org o
FULL JOIN mt_pb_orgframe f ON o.PB_ORGFRAMEID = f.PB_ORGFRAMEID;
SELECT * FROM mt_pb_org o CROSS JOIN mt_pb_orgframe f;
(+) 只能單向,無法直接實現 FULL OUTER JOIN,需用 UNION 組合 LEFT+RIGHT。靈活運用各類連接,能精準表達複雜業務查詢邏輯。