Oracle递归层次查询-亲兄弟间的排序ORDER SIBLINGS BY
2013-02-20 22:24
369 查看
原文地址
http://space.itpub.net/519536/viewspace-624176
在层次查询中,如果想让“亲兄弟”按规矩进行升序排序就不得不借助ORDERSIBLINGS
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”子句。切记之。
相关文章推荐
- 【层次查询】Hierarchical Queries之亲兄弟间的排序(ORDER SIBLINGS BY)
- mysql的逆袭:如何做oracle的start with connect by prior递归层次查询
- Oracle.start with … connect by [… and] prior…order siblings by …
- Oracle 层次查询、递归
- [SQL基础教程] 3-4 对查询结果进行排序/ORDER BY
- Oracle 利用order by + case when 实现排序,置顶
- oracle 和 db2 排序 order by desc/asc nulls last/nulss first 的用法将空值放到最后最前
- ORACLE 层次结构查询语句 start with connect by prior
- oracle order by subquery innerview(嵌套子查询中不允许出现order by 语句)
- SQL:oracle 层次查询 start with connect by
- ORACLE 层次结构查询语句 start with connect by 你用过吗?
- sql按查询结果第一列排序 (order by+数字)
- ORACLE层次查询学习 level connect by
- Oracle PL/SQL之递归查询 - CONNECT BY PRIOR
- SQL order by ID desc/asc加一个排序的字段解决查询慢问题
- Oracle分组查询 over (parttion by xxx order by xxx)
- oracle ORDER SIBLINGS BY
- oracle 递归层次查询
- Oracle PL/SQL之递归查询 - CONNECT BY PRIOR
- oracle查询语句中select from where group by having order by的解释与应用