1. 简单的树形查询
我们经常会用一些表来保存上下级的关系,如地区表、员工表、组织机构表等,为了按照上下级关系递归的调用这些数据,就需要用到树形结构,以emp表为例。
语句:
select empno as员工编号,ename as姓名,(prior ename) as主编姓名 from emp startwith empno = '7566'connectby (prior empno) = mgr;分析:
(1)起点:这个语句以empno = '7566'为起点向下递归查询。
(2)通过操作符prior可以取得上一级的信息,如上面的查询中的主管姓名(prior ename)。
(3) connect by 字句列出了(上一级的编码)等于本级的主管编码。
结果:
2. 根节点、分支节点、叶子节点
在树形结构中常用的两个伪列:level和connect_by_isleaf。level返回当前行所在的等级,connect_by_isleaf返回当前行所在的等级,根节点为1级,其下为2级…….
如果当前节点下没有其他的节点,则connect_by_isleaf返回1,否则返回0。这样就是可以通过level和connect_by_isleaf来判断标识根节点、分支节点与叶子节点。
语句:
select lpad('-',(level - 1) * 2,'-') || empo as员工编号,mgr as主管编号,levelas级别,decode(level,1,1) as根节点decode(connect_by_isleaf,1) as叶子节点,case when (connect_by_isleaf = 0andlevel > 1) then 1 endas分支节点 from emp startwith empo = 7566 connectby (prior empo) = mgr;结果:
原文链接:https://www.f2er.com/oracle/210130.html