ORACLE CONNECT BY层次查询的使用

本文介绍 Oracle 数据库中 CONNECT BY 子句的使用方法,包括语法结构、功能特性及实际应用案例。通过 CONNECT BY 可以实现树状结构数据的层次查询,适用于家族关系、组织架构等场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 Oracle当中的“CONNECT BY”是层次查询子句,一般用于树状或者层次结果集的查询。例如家族关系、组织管理等层次关系。
 每行数据都是按层次顺序检索,并规定将表中的数据连入树形结构的关系中。
 
 其语法是:
 SELECT {字段1,字段2...}
 [CONNECT_BY_ROOT|CONNECT_BY_ISLEAF|LEVEL|SYS_CONNECT_BY_PATH|CONNECT_BY_ISCYCLE]
 FROM tablename
 [WHERE]
 [STRAT WITH] 
 CONNECT BY {PRIOR 列名1=PARENT列名2}
 
 1)WHERE条件是在遍历结束后才起作用的,并且是从已经生成的层次数据中进行再次过滤;
 2)CONNECT_BY_ROOT与某个字段搭配,获取根节点的字段信息;
 3)CONNECT_BY_ISLEAF判断当前节点是否为叶子节点;
 4)LEVEL代表当前节点所在的层级,根节点返回1;
 5)START WITH用来表明以哪个节点作为根结点开始查找并构造结果集,该节点即为返回记录中的最高节点;
 6)CONNECT BY子句说明每行数据将按照层次顺序检索,PRIOR运算符在一侧表示父节点,在另一侧表示子节点;
 7)CONNECT_BY_ISCYCLE检查是否中存在上下层互为父子节点的情况,使用时需要在connect by后面加上NOCYCLE关键字;
 8)SYS_CONNECT_BY_PATH函数显示详细路径,并用“/”分隔;
 
例子如下:

SELECT RPAD(' ',2*(LEVEL-1),'-')||NAME AS ORGNAME ,
CONNECT_BY_ROOT NAME AS ROOT ,
CONNECT_BY_ISLEAF AS ISLEAF ,
LEVEL,
SYS_CONNECT_BY_PATH(NAME,'/') PATH
FROM A_ORGAN
START WITH PARENT IS NULL
CONNECT BY PRIOR ID=PARENT;

P.S.
lpad(string,padded_length,[pad_string])
string:是准备被填充的字符串;
padded_length填充之后的字符串长度,也就是该函数返回的字符串长度,如果这个数量比原字符串的长度要短,lpad函数将会把字符串截取成从左到右的n个字符; 如果这个数量比原来的字符串长度要长,则在左边补上空格;
pad_string:这个字符串是要粘贴到string的左边
rpad(string,padded_length,[pad_string]):pad_string这个字符串是要粘贴到string的右边。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26770925/viewspace-1370536/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26770925/viewspace-1370536/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值