对于oracle中使用connect by…prior实现树查询两种方式:自顶而下和自低而上,总是出现混淆状态,经常通过脚本来将prior放在等号前后来查看效果来分清使用的是哪种方法,因此对理清connect by…prior的树查询进行整理。
1.connect by prior基本语法
where <Conditional-1>
start with <Conditional-2>
connect by <Conditional-3>;
<Conditional-1>:过滤条件,用于对返回的所有记录进行过滤。
<Conditional-2>:查询结果重起始根结点的限定条件。
<Conditional-3>:连接条件,其中用prior表示上一条记录,比如connect by prior id=praentid就是说上一条记录的id是本条记录的praentid,即本记录的父亲是上一条记录。
2.connect by prior递归理解:(以自顶而下举例)
2.1.level关键字理解
由于在分解connect by prior实现中需要借助level关键字,因此简单说明下level的含义:
在具有树结构的表中,每一行数据都是树结构中的一个节点,由于节点所处的层次位置不同,所以每行记录都可以有一个层号。层号根据节点与根节点的距离确定
脚本:
SELECT t.*,level FROM EMP t CONNECT BY MGR= PRIOR EMPNO START WITH EMPNO=7839 order by level;
效果:图一
2.2.使用子查询语句来分解递归
SELECT * FROM EMP WHERE EMPNO=7839;
与图1中的level=1的值一致。
SELECT B.*
FROM (SELECT EMPNO,MGR FROM EMP WHERE EMPNO=7839) A,EMP B
WHERE A.EMPNO=B.MGR;
与图1中的level=2的值一致。
SELECT B.*
FROM ( SELECT B.EMPNO,B.MGR
FROM (SELECT EMPNO,MGR FROM EMP WHERE EMPNO=7839) A,EMP B
WHERE A.EMPNO=B.MGR) A,EMP B
WHERE A.EMPNO=B.MGR;
与图1中的level=3的值一致。
SELECT B.*
FROM (SELECT B.EMPNO,B.MGR
FROM (SELECT B.EMPNO,B.MGR
FROM (SELECT EMPNO,MGR FROM EMP WHERE EMPNO=7839) A,EMP B
WHERE A.EMPNO=B.MGR) A,EMP B
WHERE A.EMPNO=B.MGR) A,EMP B
WHERE A.EMPNO=B.MGR;
与图1中的level=4的值一致。
通过第四步查询子表中新添加的行,再次执行递归子查询。这次,该查询不生成结果。
以上为个人理解学习分解,如有较好的方式描述,可互相学习。
以scott用户下的emp表举例查询对应效果,emp表有个字段,一个是empno(员工编号),另一个是mgr(上级经理编号)
1.向下递归遍历
2.向上递归遍历
文章转载自码蚁在线,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
680次阅读
2025-04-18 14:18:38
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
634次阅读
2025-04-15 17:24:06
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
543次阅读
2025-04-20 10:07:02
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
491次阅读
2025-04-17 17:02:24
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
488次阅读
2025-04-22 00:20:37
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
472次阅读
2025-04-22 00:13:51
一页概览:Oracle GoldenGate
甲骨文云技术
467次阅读
2025-04-30 12:17:56
火焰图--分析复杂SQL执行计划的利器
听见风的声音
416次阅读
2025-04-17 09:30:30
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
372次阅读
2025-04-15 14:48:05
OR+DBLINK的关联SQL优化思路
布衣
352次阅读
2025-05-05 19:28:36