基本語法
- start with :設置起點,省略後默認以全部行爲起點。
- connect by [condition] :與一般的條件一樣作用於當前列,但是在滿足條件後,會以全部列作爲下一層級遞歸(沒有其他條件的話)。
- prior : 表示上一層級的標識符。經常用來對下一層級的數據進行限制。不可以接僞列。
- level :僞列,表示當前深度。
- connect_by_root() :顯示根節點列。經常用來分組。
- connect_by_isleaf :1是葉子節點,0不是葉子節點。在製作樹狀表格時必用關鍵字。
- sys_connect_by_path() :將遞歸過程中的列進行拼接。
- nocycle , connect_by_iscycle : 在有循環結構的查詢中使用。
- siblings : 保留樹狀結構,對兄弟節點進行排序
示例測試
簡單查詢
SQL> select t.empno,t.mgr,t.deptno ,level
2 from emp t
3 connect by prior t.empno=t.mgr
4 order by level,t.mgr,t.deptno
SQL> /
加上start with條件
SQL> select t.empno,t.mgr,t.deptno ,level
2 from emp t
3 start with t.mgr=7839
4 connect by prior t.empno=t.mgr
5 order by level,t.mgr,t.deptno
SQL> /
加了 start with t.mgr=7839
條件後,數據不一樣的原因是:
不加條件前默認是所有行爲第一行,所以當父節點未出現過時,level均爲1;
而加了條件後,只能以 t.mgr=7839 爲起始行,而父級又只能是前面出現過的,所以查出來的數據量變少。
顯示根節點,葉子節點
如果需要顯示根節點就需要加上connect_by_root
select t.empno,t.mgr,t.deptno ,level,
connect_by_root(t.empno) 根節點,connect_by_isleaf 葉子節點,
sys_connect_by_path(t.empno,'/') 拼接列
from emp t
start with t.mgr=7839
connect by prior t.empno=t.mgr
order by level,t.mgr,t.deptno
/