Oracle 递归

SELECT * FROM EMP 

scott用户下的员工表(EMP)。其中EMPNO为该员工的编号,而MGR为上级领导。所以该表为树形表。

START WITH 条件1 CONNECT BY PRIOR 条件2 。条件1为开始的条件,条件2为连接条件(查询下条记录的条件)。

1.SELECT * FROM EMP START WITH EMPNO = 7369 CONNECT BY  PRIOR MGR = EMPNO

解析:当前这条记录的MGR的值是下条数据EMPNO的值。也就是说我查询的是父节点。


结果为:查询该节点的父级节点以及一直递归到根节点。

2.SELECT * FROM EMP START WITH EMPNO = 7566 CONNECT BY  PRIOR EMPNO = MGR

解析:当前这条记录的EMPNO的值是下条数据MGR的值。也就是说我查询的是子节点。


结果为:查询该节点的子节点以及一直递归到叶子节点。

3.LEVEL 使用。(递归的深度)

SELECT t.*,LEVEL  lv FROM EMP t START WITH EMPNO = 7566 CONNECT BY  PRIOR EMPNO = MGR


4.SYS_CONNECT_BY_PATH使用。(根据深度把需要的数据进行拼接)

SELECT t.*,LEVEL lv ,SYS_CONNECT_BY_PATH(ENAME,'>') 全称 FROM EMP t START WITH EMPNO = 7566 CONNECT BY  PRIOR EMPNO = MGR

5.查询树(从根节点查询到子节点)

select t.*,SYS_CONNECT_BY_PATH(ename,'>') || '>' as tree,LEVEL LV  from emp t start with empno in (select empno from emp where mgr is null) CONNECT BY  mgr = PRIOR empno


SYS_CONNECT_BY_PATH(ename,'>') || '>' 可以在结尾的位置上再加上一个'>'。这是方便我们使用instr函数。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值