【層次查詢】Hierarchical Queries之親兄弟間的排序(ORDER SIBLINGS BY)

http://blog.itpub.net/519536/viewspace-624176 有關層次查詢以前的文章參考以下。 【層次查詢】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 --
相關文章
相關標籤/搜索