【層次查詢】Hierarchical Queries之SYS_CONNECT_BY_PATH函式

secooler發表於2010-01-01
有關層次查詢之前的文章參考如下。
【層次查詢】Hierarchical Queries之LEVEL應用
http://space.itpub.net/519536/viewspace-623916
【層次查詢】Hierarchical Queries之“樹的遍歷”
http://space.itpub.net/519536/viewspace-623809
【層次查詢】Hierarchical Queries之CONNECT_BY_ISCYCLE偽列
http://space.itpub.net/519536/viewspace-624032
【層次查詢】Hierarchical Queries之CONNECT_BY_ISLEAF偽列
http://space.itpub.net/519536/viewspace-624075

本文將要向大家介紹的是層次查詢中的SYS_CONNECT_BY_PATH函式,這個函式可以得到每個節點到根節點的完成路徑,在快速得到各節點間關係上有非常大的裨益。

1.回望關係“樹”
      A
     / \
    B   C
   /   /
  D   E
 / \
F   G

2.重溫闡述上圖的T表資料
sec@ora10g> select * from t;

X                   Y          Z
---------- ---------- ----------
A                   1
B                   2          1
C                   3          1
D                   4          2
E                   5          3
F                   6          4
G                   7          4

7 rows selected.

3.SYS_CONNECT_BY_PATH效果畢現
sec@ora10g> col tree for a16
sec@ora10g> col tree_path for a16
sec@ora10g> select lpad(' ',level-1)||x tree, SYS_CONNECT_BY_PATH(x,'/') tree_path from t start with x = 'A' connect by NOCYCLE prior y=z;

TREE             TREE_PATH
---------------- ----------------
A                /A
 B               /A/B
  D              /A/B/D
   F             /A/B/D/F
   G             /A/B/D/G
 C               /A/C
  E              /A/C/E

7 rows selected.

此時可以簡單的和我們的“樹”進行比對,是不是很神奇,很直觀。

4.小變一下,SYS_CONNECT_BY_PATH的第二個引數是可以隨心情進行修改的。
sec@ora10g> select lpad(' ',level-1)||x tree, SYS_CONNECT_BY_PATH(x,'->') tree_path from t start with x = 'A' connect by NOCYCLE prior y=z;

TREE             TREE_PATH
---------------- ----------------
A                ->A
 B               ->A->B
  D              ->A->B->D
   F             ->A->B->D->F
   G             ->A->B->D->G
 C               ->A->C
  E              ->A->C->E

7 rows selected.

5.小結
SYS_CONNECT_BY_PATH函式帶給我們的是一種清新和清晰的感覺。在複雜的層次查詢中她給我們指明瞭方向,給出了線索。善用之。

白駒過隙,忽然而已!轉眼間2010已至,不變的祝福:
Good luck.

secooler
10.01.01

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-624099/,如需轉載,請註明出處,否則將追究法律責任。

相關文章