ITPub博客

首页 > 数据库 > Oracle > Oracle Connect By用法 递归查询

Oracle Connect By用法 递归查询

Oracle 作者:honhooo8 时间:2013-12-09 20:02:16 0 删除 编辑

获安妥月全很多天期:
SELECT TRUNC (SYSDATE, "MM") + ROWNUM - 1
FROM DUAL
CONNECT BY ROWNUM <= TO_NUMBER (TO_CHAR (LAST_DAY (SYSDATE), "dd"))

http://space.itpub.net/23650854/viewspace-693105>

Oracle Connect By用法

上一篇> / 下一篇>  2011-04-20 22:23:23 / 个人分类:oracle>

查看( 909 )> / 评论( 0 )> / 评分( 0 / 0 )>

 

     oracle>中的select语句可以用START WITH...CONNECT BY PRIOR子句真现递归查询,connect by 是布局化查询中用到的,其根基语法是:


select ... from
where
start with
connect by
;

:过滤前提,用于对返回的全数记录进止过滤。
:查询成果重起始根结面的限定前提。
:连接前提

 

举例

 

数据构造布局以下图:

|----a-----a-a
|           |--a-b
|           |--a-c----a-c-a
|
|
|----b-----b-a
|           |--b-b    


表布局以下:

CREATE TABLE TREE
(ID       NUMBER,
ROOT_ID  NUMBER,
NAME     VARCHAR2(5 BYTE)
)

 

ID ROOT_ID NAME
1 0 a
2 1 a-a
3 1 a-b
4 0 b
5 4 b-a
6 4 b-b
7 1 a-c
8 7 a-c-a

 


获得无缺树(从Root往树末梢递归):


select * from TREE
start with root_id = 0
connect by prior id = root_id;

 

ROOT_ID ID NAME
0 1 a
1 2 a-a
1 3 a-b
1 7 a-c
7 8 a-c-a
0 4 b
4 5 b-a
4 6 b-b

 

 

|----a-----a-a
|           |--a-b
|           |--a-c----a-c-a
|
|
|----b-----b-a
|           |--b-b    


获得特定子树:

select * from TREE
start with id = 1
connect by prior id = root_id;

 

ROOT_ID ID NAME
0 1 a
1 2 a-a
1 3 a-b
1 7 a-c
7 8 a-c-a

 

|----a-----a-a
|           |--a-b
|           |--a-c----a-c-a


select * from TREE
start with id = 4
connect by prior id = root_id;

 

ROOT_ID ID NAME
0 4 b
4 5 b-a
4 6 b-b

 

|----a-----a-a
|           |--a-b
|           |--a-c----a-c-a


假设connect by prior中的prior被省略,则查询将没有进止深层递归。

select * from TREE 
start with root_id = 0
connect by id = root_id;

 

ROOT_ID ID NAME
0 1 a
0 4 b

 

|----a
|----b 

select * from TREE 
start with root_id = 1
connect by id = root_id;

 

ROOT_ID ID NAME
1 7 a-c
1 2 a-a
1 3 a-b

 

|----a-a
|----a-b
|----a-c

 

从末梢往树ROOT递归

select * from TREE
start with id=8
connect by prior root_id= id

 

ID ROOT_ID NAME
8 7 a-c-a
7 1 a-c
1 0 a

 

a-c-a--------a-c--------a

参考:

Oracle Connect By用法>

Oracle用Start with...Connect By子句递归查询>



<!-- 正文结束 -->

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

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2010-03-03