【層次查詢】Hierarchical Queries之親兄弟間的排序(ORDER SIBLINGS BY)
有關層次查詢之前的文章參考如下。
【層次查詢】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
【層次查詢】Hierarchical Queries之尋根問祖(CONNECT_BY_ROOT一元運算子)
http://space.itpub.net/519536/viewspace-624114
在層次查詢中,如果想讓“親兄弟”按規矩進行升序排序就不得不借助ORDER SIBLINGS BY這個特定的排序語句,若要降序輸出可以在其後新增DESC關鍵字。
透過這個實驗給大家展示一下這個“親兄弟”間的排序功能。
1.回望關係“樹”,這棵樹中的B和C是親兄弟,F和G是親兄弟。注意,D和E不是親兄弟,最多也就算是堂兄弟,“親兄弟排序”功能對他們無效。
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.我們對X列使用“ORDER SIBLINGS BY”進行升序排序,重點關注B和C、F和G的順序。
sec@ora10g> select lpad(' ',level-1)||x tree, SYS_CONNECT_BY_PATH(x,'/') tree_path from t start with x = 'A' connect by prior y=z order siblings by x;
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.我們對X列使用“ORDER SIBLINGS BY DESC”進行降序排序,重點關注B和C、F和G的順序。
sec@ora10g> select lpad(' ',level-1)||x tree, SYS_CONNECT_BY_PATH(x,'/') tree_path from t start with x = 'A' connect by prior y=z order siblings by x desc;
TREE TREE_PATH
---------------- ----------------
A /A
C /A/C
E /A/C/E
B /A/B
D /A/B/D
G /A/B/D/G
F /A/B/D/F
7 rows selected.
5.如在層次查詢中錯誤的使用了“ORDER BY”進行排序,則層次查詢中蘊含的遍歷順序將被打亂,剩下的將只是資訊的羅列。
sec@ora10g> select lpad(' ',level-1)||x tree, SYS_CONNECT_BY_PATH(x,'/') tree_path from t start with x = 'A' connect by prior y=z order by x;
TREE TREE_PATH
---------------- ----------------
A /A
B /A/B
C /A/C
D /A/B/D
E /A/C/E
F /A/B/D/F
G /A/B/D/G
7 rows selected.
6.小結
具體問題具體分析,特殊場合特出方法。在層次查詢中如需對親兄弟的先後順序進行限定,就必須要使用特有的“ORDER SIBLINGS BY”而非“ORDER BY”子句。切記之。
Good luck.
secooler
10.01.03
-- 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
【層次查詢】Hierarchical Queries之尋根問祖(CONNECT_BY_ROOT一元運算子)
http://space.itpub.net/519536/viewspace-624114
在層次查詢中,如果想讓“親兄弟”按規矩進行升序排序就不得不借助ORDER SIBLINGS BY這個特定的排序語句,若要降序輸出可以在其後新增DESC關鍵字。
透過這個實驗給大家展示一下這個“親兄弟”間的排序功能。
1.回望關係“樹”,這棵樹中的B和C是親兄弟,F和G是親兄弟。注意,D和E不是親兄弟,最多也就算是堂兄弟,“親兄弟排序”功能對他們無效。
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.我們對X列使用“ORDER SIBLINGS BY”進行升序排序,重點關注B和C、F和G的順序。
sec@ora10g> select lpad(' ',level-1)||x tree, SYS_CONNECT_BY_PATH(x,'/') tree_path from t start with x = 'A' connect by prior y=z order siblings by x;
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.我們對X列使用“ORDER SIBLINGS BY DESC”進行降序排序,重點關注B和C、F和G的順序。
sec@ora10g> select lpad(' ',level-1)||x tree, SYS_CONNECT_BY_PATH(x,'/') tree_path from t start with x = 'A' connect by prior y=z order siblings by x desc;
TREE TREE_PATH
---------------- ----------------
A /A
C /A/C
E /A/C/E
B /A/B
D /A/B/D
G /A/B/D/G
F /A/B/D/F
7 rows selected.
5.如在層次查詢中錯誤的使用了“ORDER BY”進行排序,則層次查詢中蘊含的遍歷順序將被打亂,剩下的將只是資訊的羅列。
sec@ora10g> select lpad(' ',level-1)||x tree, SYS_CONNECT_BY_PATH(x,'/') tree_path from t start with x = 'A' connect by prior y=z order by x;
TREE TREE_PATH
---------------- ----------------
A /A
B /A/B
C /A/C
D /A/B/D
E /A/C/E
F /A/B/D/F
G /A/B/D/G
7 rows selected.
6.小結
具體問題具體分析,特殊場合特出方法。在層次查詢中如需對親兄弟的先後順序進行限定,就必須要使用特有的“ORDER SIBLINGS BY”而非“ORDER BY”子句。切記之。
Good luck.
secooler
10.01.03
-- The End --
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-624176/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【層次查詢】Hierarchical Queries之LEVEL應用
- 【層次查詢】Hierarchical Queries之“樹的遍歷”
- 【層次查詢】Hierarchical Queries之處理順序
- 【層次查詢】Hierarchical Queries之CONNECT_BY_ISCYCLE偽列
- 【層次查詢】Hierarchical Queries之CONNECT_BY_ISLEAF偽列
- 【層次查詢】Hierarchical Queries之SYS_CONNECT_BY_PATH函式函式
- 在Oracle層次查詢中給SIBLINGS排序Oracle排序
- 【層次查詢】Hierarchical Queries之尋根問祖(CONNECT_BY_ROOT一元運算子)
- Hierarchical Queries 級聯查詢(樹狀結構查詢)
- informix 中層次/樹型/Hierarchical查詢的使用ORM
- [轉]Hierarchical Queries之LEVEL應用
- ORDER對查詢結果進行排序排序
- Oracle分頁查詢之order byOracle
- Oracle層次化查詢Oracle
- 如何理解樹狀sql中ORDER SIBLINGS BY排序的含義SQL排序
- 0629_層次查詢
- 【SQL 學習】層次化查詢之CONNECT BY 和 START WITHSQL
- Django-ORM 之查詢排序DjangoORM排序
- 字串查詢之字元次數字串字元
- 資料庫開發基礎--層次查詢+資料庫
- 資料庫開發基礎---層次查詢資料庫
- Django筆記九之model查詢filter、exclude、annotate、order_byDjango筆記Filter
- Media Queries媒體查詢常用關鍵詞
- MongoDB之資料查詢(資料排序)MongoDB排序
- 【SQL 學習】排序問題之order by與索引排序SQL排序索引
- 查詢與排序02,折半查詢排序
- 排序和查詢排序
- 查詢與排序01,線性查詢,時間複雜度,演算法排序時間複雜度演算法
- 【--SQL基礎-->層次化查詢(START BY ... CONNECT BY PRIOR)】SQL
- SQL解析過程中的查詢轉換 - Transforming QueriesSQLORM
- iOS 演算法之排序、查詢、遞迴iOS演算法排序遞迴
- 兄弟元件之間資訊傳遞元件
- 查詢兩個日期之間的資料
- vue 兄弟元件之間傳值之busVue元件
- cassandra的索引查詢和排序索引排序
- Oracle層次查詢中connect_by_iscycle偽列的取值研究Oracle
- SQL Cookbook—查詢、排序SQL排序
- 查詢與排序05,氣泡排序排序