Oracle函數 connect by (隨記)----遞歸查詢

參考《oracle connect by 遞歸查詢用法》

基本語法

  • 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
/

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章