比如有这样的需求,现在要裁员,将某个部门的员工包括经理全部裁掉,那么可以使用树形查询作为子查询实现这个功能无限层次树形笔记本 。将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)找出每个部门的经理
无限层次树形笔记本 这个需求,我们可以从树中查找,也就是对于每个部门选最高等级节点。可以使用connect 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漏洞的一种打开方式
文章地址:https://www.tianxianmao.com/article/other/sczs.html