【層次查詢】Hierarchical Queries之尋根問祖(CONNECT_BY_ROOT一元運算子)
有關層次查詢之前的文章參考如下。
【層次查詢】Hierarchical Queries之“樹的遍歷”
http://space.itpub.net/519536/viewspace-623809
【層次查詢】Hierarchical Queries之LEVEL應用
http://space.itpub.net/519536/viewspace-623916
【層次查詢】Hierarchical Queries之CONNECT_BY_ISCYCLE偽列
http://space.itpub.net/519536/viewspace-624032
【層次查詢】Hierarchical Queries之CONNECT_BY_ISLEAF偽列
http://space.itpub.net/519536/viewspace-624075
【層次查詢】Hierarchical Queries之SYS_CONNECT_BY_PATH函式
http://space.itpub.net/519536/viewspace-624099
CONNECT_BY_ROOT這個一元運算子只能在層次查詢中使用,功能很簡單,可以得到每個分支的根節點資訊。
記住,既然是一元運算子,那麼這個運算子後面一定要有“運算內容”。
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.我們結合LEVEL偽列和SYS_CONNECT_BY_PATH函式看一下CONNECT_BY_ROOT對X列運算後的結果
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,CONNECT_BY_ROOT x from t connect by prior y=z;
TREE TREE_PATH CONNECT_BY
---------------- ---------------- ----------
B /B B
D /B/D B
F /B/D/F B
G /B/D/G B
C /C C
E /C/E C
D /D D
F /D/F D
G /D/G D
E /E E
F /F F
G /G G
A /A A
B /A/B A
D /A/B/D A
F /A/B/D/F A
G /A/B/D/G A
C /A/C A
E /A/C/E A
19 rows selected.
是不是有一種“尋根問祖”的韻味在裡邊。在遍歷的過程中每一個子樹根節點的X列資訊都被清晰的得到了。
4.為了更加明顯的體現出CONNECT_BY_ROOT是一個一元運算子,我們可以將上面的“CONNECT_BY_ROOT x”改寫成為“CONNECT_BY_ROOT(x)”。
sec@ora10g> select lpad(' ',level-1)||x tree, SYS_CONNECT_BY_PATH(x,'/') tree_path,CONNECT_BY_ROOT(x) from t connect by prior y=z;
TREE TREE_PATH CONNECT_BY
---------------- ---------------- ----------
B /B B
D /B/D B
F /B/D/F B
G /B/D/G B
C /C C
E /C/E C
D /D D
F /D/F D
G /D/G D
E /E E
F /F F
G /G G
A /A A
B /A/B A
D /A/B/D A
F /A/B/D/F A
G /A/B/D/G A
C /A/C A
E /A/C/E A
19 rows selected.
5.小結
在複雜的層次查詢中一切可以確定資料根源的資訊都是值得推崇的,CONNECT_BY_ROOT這個一元運算子便是其中之一。
Good luck.
secooler
10.01.02
-- The End --
【層次查詢】Hierarchical Queries之“樹的遍歷”
http://space.itpub.net/519536/viewspace-623809
【層次查詢】Hierarchical Queries之LEVEL應用
http://space.itpub.net/519536/viewspace-623916
【層次查詢】Hierarchical Queries之CONNECT_BY_ISCYCLE偽列
http://space.itpub.net/519536/viewspace-624032
【層次查詢】Hierarchical Queries之CONNECT_BY_ISLEAF偽列
http://space.itpub.net/519536/viewspace-624075
【層次查詢】Hierarchical Queries之SYS_CONNECT_BY_PATH函式
http://space.itpub.net/519536/viewspace-624099
CONNECT_BY_ROOT這個一元運算子只能在層次查詢中使用,功能很簡單,可以得到每個分支的根節點資訊。
記住,既然是一元運算子,那麼這個運算子後面一定要有“運算內容”。
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.我們結合LEVEL偽列和SYS_CONNECT_BY_PATH函式看一下CONNECT_BY_ROOT對X列運算後的結果
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,CONNECT_BY_ROOT x from t connect by prior y=z;
TREE TREE_PATH CONNECT_BY
---------------- ---------------- ----------
B /B B
D /B/D B
F /B/D/F B
G /B/D/G B
C /C C
E /C/E C
D /D D
F /D/F D
G /D/G D
E /E E
F /F F
G /G G
A /A A
B /A/B A
D /A/B/D A
F /A/B/D/F A
G /A/B/D/G A
C /A/C A
E /A/C/E A
19 rows selected.
是不是有一種“尋根問祖”的韻味在裡邊。在遍歷的過程中每一個子樹根節點的X列資訊都被清晰的得到了。
4.為了更加明顯的體現出CONNECT_BY_ROOT是一個一元運算子,我們可以將上面的“CONNECT_BY_ROOT x”改寫成為“CONNECT_BY_ROOT(x)”。
sec@ora10g> select lpad(' ',level-1)||x tree, SYS_CONNECT_BY_PATH(x,'/') tree_path,CONNECT_BY_ROOT(x) from t connect by prior y=z;
TREE TREE_PATH CONNECT_BY
---------------- ---------------- ----------
B /B B
D /B/D B
F /B/D/F B
G /B/D/G B
C /C C
E /C/E C
D /D D
F /D/F D
G /D/G D
E /E E
F /F F
G /G G
A /A A
B /A/B A
D /A/B/D A
F /A/B/D/F A
G /A/B/D/G A
C /A/C A
E /A/C/E A
19 rows selected.
5.小結
在複雜的層次查詢中一切可以確定資料根源的資訊都是值得推崇的,CONNECT_BY_ROOT這個一元運算子便是其中之一。
Good luck.
secooler
10.01.02
-- The End --
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-624114/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【層次查詢】Hierarchical Queries之LEVEL應用
- 【層次查詢】Hierarchical Queries之“樹的遍歷”
- 【層次查詢】Hierarchical Queries之處理順序
- 【層次查詢】Hierarchical Queries之CONNECT_BY_ISCYCLE偽列
- 【層次查詢】Hierarchical Queries之CONNECT_BY_ISLEAF偽列
- 【層次查詢】Hierarchical Queries之SYS_CONNECT_BY_PATH函式函式
- 【層次查詢】Hierarchical Queries之親兄弟間的排序(ORDER SIBLINGS BY)排序
- Hierarchical Queries 級聯查詢(樹狀結構查詢)
- informix 中層次/樹型/Hierarchical查詢的使用ORM
- [轉]Hierarchical Queries之LEVEL應用
- SQL Server查詢計劃系列之——邏輯運算子與物理運算子SQLServer
- 10.2 查詢地址:&運算子
- Oracle層次化查詢Oracle
- 運算子的關係,什麼叫一元運算子,二元運算子,三元運算子,運算子優先順序,以及運算子的
- 0629_層次查詢
- javascript一元運算子簡單介紹JavaScript
- 【SQL 學習】層次化查詢之CONNECT BY 和 START WITHSQL
- 字串查詢之字元次數字串字元
- 資料庫開發基礎--層次查詢+資料庫
- 資料庫開發基礎---層次查詢資料庫
- mongodb 查詢條件,查詢邏輯對照表,邏輯運算子,正規表示式匹配查詢,排序,分頁/巧分頁,更新運算子,更新單個/多個文件,刪除文件,批次插入,$type運算子,ObjectId生成器,內嵌文件和陣列查詢修改MongoDB排序Object陣列
- Media Queries媒體查詢常用關鍵詞
- 搜尋/查詢
- 【--SQL基礎-->層次化查詢(START BY ... CONNECT BY PRIOR)】SQL
- 運算子 運算子
- 一次效能問題原因查詢
- 在RFT中根據指定的標題查詢頂層視窗
- select查詢之五:分析函式在查詢的運用函式
- [java基礎]之 運算子Java
- Java學習之運算子Java
- 記錄一次遞迴查詢的運用遞迴
- Oracle多層級查詢相容的效能問題Oracle
- php運算子 比較運算子 邏輯運算子 三元運算子PHP
- 根據表查詢索引資訊索引
- 根據父表查詢子表
- 根據PID查詢 sqlSQL
- 運算子-賦值運算子賦值
- MySQL的四種運算子(算術運算子、比較運算子、邏輯運算子和位運算子)MySql