Oracle 层次查询 connect by


 

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:
  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值