比如有這樣的需求,現在要裁員,將某個部門的員工包括經理全部裁掉,那么可以使用樹形查詢作為子查詢實現這個功能無限層次樹形筆記本 。將id為2 的員工管理的所有員工包括自己刪除。因為要全部裁掉了。那么語句如下:
delete from s_emp where id in(
select id from
無限層次樹形筆記本s_emp a
start with id=2 –從id=2的員工開始查找其子節點,把整棵樹刪除
connect by prior id=manager_id);
5)找出每個部門的經理
無限層次樹形筆記本 這個需求,我們可以從樹中查找,也就是對于每個部門選最高等級節點??梢允褂胏onnect by后加條件過濾branches 的方法。
select level,a.* from
s_emp a
start with manager_id is null
connect by prior id=manager_id and dept_id !=prior dept_id;--當前行的dept_id不等于前一行的dept_id,即每個子樹中選最高等級節點
6)查詢一個組織中最高的幾個等級
用where level條件過濾
select level,a.* from
s_emp a
where level <=2 –查找前兩個等級
無限層次樹形筆記本 start with manager_id is null
connect by prior id=manager_id and dept_id !=prior dept_id;
7)合計層次
有兩個需求,一是對一個指定的子樹subtree 做累加計算salary,一是將每行都作為root節點,然后對屬于這個節點的所有字節點累加計算salary。
第一種很簡單,求下sum就可以了,語句:
select sum(salary) from
s_emp a
start with id=2—比如從id=2開始
connect by prior id=manager_id;
第2 個需求,需要用到第1 個,對每個root 節點求這個樹的累加值,然后內部層次查詢的開始節點從外層查詢獲得。
select last_name,salary,(
select sum(salary) from
s_emp
start with id=a.id --讓每個節點都成為root
connect by prior id=manager_id) sumsalary
from s_emp a;
上一篇:批量挖SRC漏洞的一種打開方式
文章地址:http://www.meyanliao.com/article/other/sczs.html