sql中ORDER SIBLINGS BY排序的含义
来源:互联网 发布:世界上的光 海明威知乎 编辑:程序博客网 时间:2024/06/05 11:31
SIBLINGS 是兄弟姐妹的意思,那么ORDER SIBLINGS BY的意思就是在兄弟姐妹之间的排序,和order by所表示的含义绝对不同,针对树状sql,我觉得ORDER SIBLINGS BY更有意义,树状sql查询出来的结果本身就是按照层次(hierarchy)结构排好序的,而加上关键字SIBLINGS 其实是在hierarchy内部进行排序。
原文地址 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”子句。切记之。
通过这个实验给大家展示一下这个“亲兄弟”间的排序功能。
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”子句。切记之。
0 0
- sql中ORDER SIBLINGS BY排序的含义
- sql中ORDER SIBLINGS BY排序的含义
- oracle ORDER SIBLINGS BY
- Oracle递归层次查询-亲兄弟间的排序ORDER SIBLINGS BY
- sql server中order by排序的用法
- sql中order by与索引排序的区别
- sql中order by对null值的排序
- SQL中先分组再组内排序再输出的ROW_NUMBER() OVER(partition by..order by..)
- sql 中 order by
- SQL语法中Order by的用法
- SQL查询排序ORDER BY
- SQL 经典排序 Order By
- SQL ORDER BY不规则排序
- SQL ORDER BY(排序)
- SQL 的order by
- SQL语句中order by两个字段同时排序
- sql语句中order by 多个字段同时排序的应用
- SQL中order by 、group by 、having的用法区别
- LBS-基于位置服务(Location Based Service)
- CurrentCulture
- START WITH...CONNECT BY PRIOR详解
- Implement strStr()
- pat 1031
- sql中ORDER SIBLINGS BY排序的含义
- sudo source /etc/profile 提示找不到source命令
- java中String.intern() 方法
- 开放(关闭)端口、防火墙
- 未来就在眼前
- 个人密码安全策略
- linux学习笔记
- 《数据库》查询树优化
- 黑马程序员_静态类