Oracle-SQL开发 —— 层次查询(分级查询)

涎涎原创约 501 字大约 2 分钟...OracleOracle

56-Oracle-SQL开发 —— 层次查询(分级查询).md

注意

本博文仅供学术研究和交流参考,严禁将其用于商业用途。如因违规使用产生的任何法律问题,使用者需自行负责。

概念

示例代码

--从顶向下查询
1.查询KING管理的所有的下级员工信息
select * from emp start with ename = 'KING' connect by prior 父列 = 子列;--empno父列   mgr子列
select * from emp start with ename = 'KING' connect by prior empno = mgr;
select * from emp start with ename = 'KING' connect by mgr = prior empno;--同上

--从下向上查询
1.查询SMITH的所有的上级员工信息
select * from emp start with ename = 'SMITH' connect by prior 子列 = 父列;--empno父列   mgr 列  
select * from emp start with ename = 'SMITH' connect by prior mgr = empno;
select * from emp start with ename = 'SMITH' connect by empno = prior mgr;--同上

--使用level伪列
select level,emp.* from emp start with ename = 'KING' connect by prior empno = mgr;
select level,emp.* from emp start with ename = 'SMITH' connect by prior mgr = empno;

--使用level,以及lpad生成树状报告
select level,ename,lpad(ename,length(ename) + level*8,'-') from emp start with empno = 7839 connect by prior empno = mgr;

--排除某几行数据:使用where添加限制条件
1.查询7839管理的所有的下级员工信息,但是不包括SCOTT的信息
select level, ename, lpad(ename, length(ename) + level * 8, '-')
  from emp
  where ename <> 'SCOTT'
 start with empno = 7839
connect by prior empno = mgr;

--排除一个分支:使用connect by添加限制条件
1.查询7839管理的所有的下级员工信息,但是不包括BLAKE以及BLAKE所有下属的信息
select level, ename, lpad(ename, length(ename) + level * 8, '-')
  from emp
 start with empno = 7839
connect by prior empno = mgr and ename <> 'BLAKE';

分割线


相关信息

以上就是我关于 Oracle-SQL开发 —— 层次查询(分级查询) 知识点的整理与总结的全部内容,希望对你有帮助。。。。。。。

上次编辑于:
贡献者: 涎涎
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.4