內聯結
-- Oracle 傳統語法
SELECT * FROM a, b WHERE a.id = b.id;
-- ANSI SQL-92 (9i 支援)
SELECT * FROM a INNER JOIN b ON a.id = b.id;
外聯結:Oracle (+) 與 ANSI 標準對照
| 類型 | Oracle (+) 語法 | ANSI 標準 (9i+) | 結果集 |
| 左外聯結 | WHERE a.id = b.id(+) | LEFT OUTER JOIN b ON a.id = b.id | 所有 A 列 + 對應 B 列 (無對應則 NULL) |
| 右外聯結 | WHERE a.id(+) = b.id | RIGHT OUTER JOIN b ON a.id = b.id | 所有 B 列 + 對應 A 列 |
| 完全外聯結 | 8i 不支援雙向 (+) | FULL OUTER JOIN b ON a.id = b.id | A 全部 + B 全部 |
8i 完全外聯結替代寫法
SELECT a.id, b.id FROM a, b WHERE a.id = b.id(+)
UNION
SELECT a.id, b.id FROM a, b WHERE a.id(+) = b.id;
實務範例:員工與部門
-- 左外聯結:所有員工,含未分部門者
SELECT e.last_name, e.department_id, d.department_name
FROM employees e LEFT OUTER JOIN departments d
ON e.department_id = d.department_id;
-- 右外聯結:所有部門,含無員工部門
SELECT e.last_name, e.department_id, d.department_name
FROM employees e RIGHT OUTER JOIN departments d
ON e.department_id = d.department_id;
-- 完全外聯結:員工全集 ∪ 部門全集
SELECT e.last_name, e.department_id, d.department_name
FROM employees e FULL OUTER JOIN departments d
ON e.department_id = d.department_id;