SELECT * FROM EMP 

Oracle 递归

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的值。也就是说我查询的是父节点。

Oracle 递归

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

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

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

Oracle 递归

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

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

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

Oracle 递归

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

Oracle 递归

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

Oracle 递归

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

相关文章:

  • 2021-07-03
  • 2021-07-31
  • 2021-11-19
  • 2021-05-20
猜你喜欢
  • 2021-08-22
  • 2021-10-12
  • 2022-12-23
  • 2021-08-29
  • 2021-06-09
  • 2021-08-27
  • 2021-05-27
相关资源
相似解决方案