oracle分层查询

前端之家收集整理的这篇文章主要介绍了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) 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

猜你在找的Oracle相关文章