Oracle CONNECT BY (层级查询)的用法记录

前两天在写SQL的时候 无意间发现这样一条语句 我得天呐 我都惊讶了 还能这样搞的 以前用MYSQL的时候 像菜单这种层级查询的话还要去查询每一条 然后再进行一个递归 封装 麻烦的一* Oracle竟然一条语句就搞定了 这不赶紧偷过来 (奇怪 读书人的事怎么能叫偷呢)

select  CONNECT_BY_ROOT(字段) 根节点,level 层级,connect_by_isleaf 是否叶子节点 
from table_name t  
START WITH [条件(以哪个节点开始)] 
CONNECT BY  t.所属 = PRIOR t.名称 order siblings by t.所属 desc;

说明:

  • start with :设置起点 就是从哪个节点开始查,省略后默认以全部行为起点。

  • connect by [condition] :与一般的条件一样作用于当前列,但是在满足条件后,会以全部列作为下一层级递归(没有其他条件的话)。

  • prior : 表示上一层级的标识符。经常用来对下一层级的数据进行限制。不可以接伪列。

    PRIOR:prior在等号哪边,表示哪边是"我的"

    举个🌰 :
    找下属: prior(“我的”) employee_id = "别人的"manager_id --> 找出我的下属 (向下查询)
    找上司: employee_id = prior manager_id 别人的工号 = 我的经理编号 --> 别人是我的经理 & 别人是我经理的经理 --> 我的上司们


  • level :伪列,表示当前深度。

  • connect_by_root() :显示根节点列。经常用来分组。

  • connect_by_isleaf :1是叶子节点,0不是叶子节点。在制作树状表格时必用关键字。

  • sys_connect_by_path() :将递归过程中的列进行拼接。

  • nocycle , connect_by_iscycle : 在有循环结构的查询中使用。

  • siblings : 保留树状结构,对兄弟节点进行排序

转载自:
https://blog.csdn.net/nayi_224/article/details/79811185
https://www.pianshen.com/article/540440773/
https://www.jianshu.com/p/f6f8707ff93b

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值