ITPub博客

首页 > 数据库 > Oracle > ORACLE CONNECT BY层次查询的使用

ORACLE CONNECT BY层次查询的使用

原创 Oracle 作者:icyflyer 时间:2014-12-17 09:51:44 0 删除 编辑
 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博客 ” ,链接:https://blog.itpub.net/26770925/viewspace-1370536/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-07-28

  • 博文量
    37
  • 访问量
    356728