start with connect by 用法

pwz1688發表於2014-01-02

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章