当前位置:   article > 正文

Oracle 层次查询 connect by

connect by nocycle 层数

 

oracle 层次查询


语法:
      SELECT ... FROM
           [WHERE condition]                              --过滤某些节点
            [  START WITH [nocycle] start_condition]    --定义查询的起点, 可以使用子查询
          CONNECT BY [[nocycle] PRIOR COLUMN1 = COLUMN2 [AND ...]];   --定义父子关系
          order [ sibilings ] by ...
 
例1:
找出101雇员, 及其全下属/上司
 select *
   from myemp
  start with employee_id = 101
connect by prior employee_id = manager_id;  -- 找下属
-- connect by employee_id = prior manager_id;  --找上司

 

prior在等号哪边,表示哪边是"我的"
找下属:  "我的"employee_id = "别人的"manager_id --> 找出我的下属  (向下查询)
找上司: employee_id = prior manager_id 别人的工号 = 我的经理编号 --> 别人是我的经理 & 别人是我经理的经理 --> 我的上司们
 
注意,level伪列只能和connect by子句结合使用, 否则Oracle会返回错误 ORA-01788: 此查询块中要求 CONNECT BY 子句
 
例2:
统计树形的 层数
SELECT COUNT(DISTINCT LEVEL) 
  FROM EMPLOYEES
 START WITH MANAGER_ID IS NULL
CONNECT BY PRIOR EMPLOYEE_ID = MANAGER_ID;  

 

例3:
统计树的 节点数量 , 例如, 查询每个级别的雇员数量
 
 select count(level)  --在统计树种节点的数量时, 一定不能加distinct!
   from employees
  start with manager_id is null
connect by prior employee_id = manager_id
  group by level; 
 
例4:
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/692398
推荐阅读
相关标签
  

闽ICP备14008679号