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的右边。
每行数据都是按层次顺序检索,并规定将表中的数据连入树形结构的关系中。
其语法是:
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/