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函数。