start with connect by 用法

Oracle中的select语句可以用start with...connect by prior子句实现递归查询,connect by 是结构化查询中用到的,其基本语法是:

select ... from
where
start with
connect by ;

:过滤条件,用于对返回的所有记录进行过滤。
:查询结果重起始根结点的限定条件。
:连接条件,其中用PRIOR表示上一条记录,比如 CONNECT BY PRIOR id = root_id就是说上一条记录的id 是本条记录的root_id,即本记录的父亲是上一条记录

运算符PRIOR被放置于等号前后的位置,决定着查询时的检索顺序。 
PRIOR被置于CONNECT BY子句中等号的前面时,则强制从根节点到叶节点的顺序检索,即由父节点向子节点方向通过树结构,我们称之为自顶向下的方式。如: 
CONNECT BY PRIOR id=root_id,PIROR运算符被置于CONNECT BY 子句中等号的后面时,则强制从叶节点到根节点的顺序检索,即由子节点向父节点方向通过树结构,我们称之为自底向上的方式。例如: CONNECT BY id=PRIOR root_id ,在这种方式中也应指定一个开始的节点。
例:

点击(此处)折叠或打开

  1. create table tmp(
  2. root_id number,
  3. id number,
  4. name varchar(5),
  5. description varchar(10)
  6. );
  7. insert into tmp(root_id,id,name,description) values(0,1,'a','aaa');
  8. insert into tmp(root_id,id,name,description) values(1,2,'a1','aaa1');
  9. insert into tmp(root_id,id,name,description) values(1,3,'a2','aaa2');
  10. insert into tmp(root_id,id,name,description) values(2,4,'b','bbb');
  11. insert into tmp(root_id,id,name,description) values(4,5,'b1','bbb1');
  12. insert into tmp(root_id,id,name,description) values(4,6,'b2','bbb2');
  13. commit;


  14. SQL> select * from tmp;

  15.    ROOT_ID ID NAME DESCRIPTIO
  16. ---------- ---------- ----- ----------

  17.          0 1 a aaa
  18.          1 2 a1 aaa1
  19.          1 3 a2 aaa2
  20.          2 4 b bbb
  21.          4 5 b1 bbb1
  22.          4 6 b2 bbb2

  23. 已选择6行。


  24. SQL> select * from tmp start with id=6 connect by prior id=root_id;

  25.    ROOT_ID ID NAME DESCRIPTIO
  26. ---------- ---------- ----- ----------

  27.          4 6 b2 bbb2

  28. SQL> select * from tmp start with id=6 connect by id=prior root_id;

  29.    ROOT_ID ID NAME DESCRIPTIO
  30. ---------- ---------- ----- ----------

  31.          4 6 b2 bbb2
  32.          2 4 b bbb
  33.          1 2 a1 aaa1
  34.          0 1 a aaa



  35. SQL> select * from tmp start with root_id=0 connect by prior id=root_id;

  36.    ROOT_ID ID NAME DESCRIPTIO
  37. ---------- ---------- ----- ----------

  38.          0 1 a aaa
  39.          1 2 a1 aaa1
  40.          2 4 b bbb
  41.          4 5 b1 bbb1
  42.          4 6 b2 bbb2
  43.          1 3 a2 aaa2

  44. 已选择6行。

  45. SQL>

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

转载于:http://blog.itpub.net/21251711/viewspace-1066371/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值