oracle分层查询

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, 1) as叶子节点,
       case
         when (connect_by_isleaf = 0andlevel > 1) then
          1
       endas分支节点
  from emp
 startwith empo = 7566
connectby (prior empo) = mgr;
结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值