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 --