oracle中Connect By用法介紹
為解決oracle中自連線查詢不適合操作大表的情況,採用connect by 方式實現。oracle中可以用START WITH...CONNECT BY PRIOR子句實現遞迴查詢,connect by 在結構化查詢中應用。
基本語法:
select ... from <TableName>
where <Conditional1>
connect by <Conditional2>
start with <Conditional3>
connect by 和start with的先後順序可以調換
其中:
Conditional1是過濾條件,用於對返回的所有記錄進行過濾。
Conditional2是連線條件
Conditional3是過濾條件,用於對返回的所有記錄進行過濾。
select * From emp; 其中empno(員工編號),mgr(經理編號)
可以對其中員工和經理對應關係整理如下:其中下一級節點的經理號是上一級的員工號
查詢語句:
SQL> select level 級數 ,connect_by_isleaf 是否葉子 , ename 員工姓名 ,mgr 經理號 from emp connect by prior empno=mgr start with mgr is null;
level,connect_by_isleaf,connect_by_iscycle偽列
level 就是這個資料屬於哪一個等級
connect_by_isleaf 就是樹的葉子節點
connect_by_iscycle 導致出現死迴圈的那個樹枝
prior運算子必須放置在連線關係的兩列中某一個的前面。對於節點間的父子關係,prior運算子在一側表示父節點,在另一側表示子節點,從而確定查詢樹結構是的順序是自頂向下還是自底向上