| 類型 | 特徵 | 典型場景 |
|---|---|---|
| 等值聯結 | 共同欄位值相等 | 主外鍵關聯查詢 |
| 外部聯結 | 保留單邊不符合資料 | 顯示無部門員工/無員工部門 |
| 非等值聯結 | 範圍比較 (>, <, BETWEEN) | 薪資等級對照 |
| 自聯結 | 表與自身聯結 | 員工-主管層級關係 |
-- 舊語法
SELECT * FROM emp e, dept d WHERE e.deptno = d.deptno;
-- ANSI 標準 (推薦)
SELECT * FROM emp e JOIN dept d ON e.deptno = d.deptno;
-- 多條件
SELECT * FROM emp e JOIN dept d ON e.deptno = d.deptno AND e.sal > 2000;
-- 右外聯結:顯示所有部門(含無員工)
SELECT * FROM emp e, dept d WHERE e.deptno(+) = d.deptno;
-- 左外聯結:顯示所有員工(含無部門)
SELECT * FROM emp e, dept d WHERE e.deptno = d.deptno(+);
-- 右外聯結
SELECT * FROM emp e RIGHT OUTER JOIN dept d ON e.deptno = d.deptno;
-- 左外聯結
SELECT * FROM emp e LEFT OUTER JOIN dept d ON e.deptno = d.deptno;
-- 全外聯結
SELECT * FROM emp e FULL OUTER JOIN dept d ON e.deptno = d.deptno;
-- 員工薪資對應等級 (salgrade: losal ~ hisal)
SELECT e.empno, e.ename, e.sal, s.grade
FROM emp e, salgrade s
WHERE e.sal BETWEEN s.losal AND s.hisal;
-- 三表非等值聯結
SELECT e.empno, e.ename, e.sal, s.grade, d.dname
FROM emp e, dept d, salgrade s
WHERE e.deptno = d.deptno AND e.sal BETWEEN s.losal AND s.hisal;
將同一張表視為兩個邏輯表,透過別名區分:
-- 查詢員工及其主管姓名
SELECT w.ename 員工, w.mgr 主管編號, m.empno 主管編號, m.ename 主管姓名
FROM emp w, emp m
WHERE w.mgr = m.empno;
w (Worker):員工角色m (Manager):主管角色mgr = 主管的 empno(+) 只能出現在單邊,不可用於多表鏈式外部聯結w/m、child/parent)