(+) 語法)。CONNECT BY PRIOR 遞歸樹結構。SELECT e.empno, e.ename, e.sal, d.dname, d.deptno
FROM emp e, dept d
WHERE e.deptno = d.deptno;
SELECT e.ename, e.sal, s.grade
FROM emp e, salgrade s
WHERE e.sal BETWEEN s.losal AND s.hisal;
SELECT d.deptno, d.dname, COUNT(e.empno) 人數
FROM dept d, emp e
WHERE d.deptno = e.deptno(+)
GROUP BY d.deptno, d.dname
ORDER BY 1;
-- 結果包含 DEPTNO=40, 人數=0
規則:(+) 加在**從表**列上,表示「從表無匹配時也顯示主表行」。
SELECT e.ename || '的經理是' || m.ename
FROM emp e, emp m
WHERE e.mgr = m.empno;
-- KING 無經理 (MGR IS NULL) 不會顯示
注意:自連接產生笛卡爾積,僅適用小表。
SELECT LEVEL, empno, ename, mgr
FROM emp
CONNECT BY PRIOR empno = mgr
START WITH mgr IS NULL
ORDER BY LEVEL;
LEVEL:根節點=1,每遞歸一層 +1。START WITH:指定根節點條件。CONNECT BY PRIOR:定義父子關聯方向。SYS_CONNECT_BY_PATH(ename, '→') 顯示完整路徑。CONNECT_BY_ISLEAF 判斷葉子節點。WITH RECURSIVE 替代。