程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle Connect by與遞歸with,oracleconnect

Oracle Connect by與遞歸with,oracleconnect

編輯:Oracle教程

Oracle Connect by與遞歸with,oracleconnect


層次查詢

select * from emp;

select empno,ename,job,mgr,deptno,level,sys_connect_by_path(ename,'/'),connect_by_root(ename)

from emp

start with mgr is null

connect by prior empno=mgr

order by level,empno;

WITH T(empno, ename, job, mgr, deptno, the_level, path,top_manager) AS ( ---- 必須把結構寫出來

SELECT empno, ename, job, mgr, deptno ---- 先寫錨點查詢,用START WITH的條件

,1 AS the_level ---- 遞歸起點,第一層

,'\'||ename ---- 路徑的第一截

,ename AS top_manager ---- 原來的CONNECT_BY_ROOT

FROM EMP

WHERE mgr IS NULL ---- 原來的START WITH條件

UNION ALL ---- 下面是遞歸部分

SELECT e.empno, e.ename, e.job, e.mgr, e.deptno ---- 要加入的新一層數據,來自要遍歷的emp表

,1 + t.the_level ---- 遞歸層次,在原來的基礎上加1。這相當於CONNECT BY查詢中的LEVEL偽列

,t.path||'\'||e.ename ---- 把新的一截路徑拼上去

,t.top_manager ---- 直接繼承原來的數據,因為每個路徑的根節點只有一個

FROM t, emp e ---- 典型寫法,把子查詢本身和要遍歷的表作一個連接

WHERE t.empno = e.mgr ---- 原來的CONNECT BY條件

) ---- WITH定義結束

SELECT * FROM T

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved