oracle分层查询
发布时间:2020-12-12 15:15:35 所属栏目:百科 来源:网络整理
导读:1. 简单的树形查询 我们经常会用一些表来保存上下级的关系,如地区表、员工表、组织机构表等,为了按照上下级关系递归的调用这些数据,就需要用到树形结构,以emp表为例。 语句: select empno as员工编号,ename as姓名,(prior ename) as主编姓名 from emp s
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;结果:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |