Order Siblings by 排序

在层次查询中,如果想让“亲兄弟”按规矩进行升序排序就需要使用ORDER SIBLINGS BY 这个特定的排序语句,若要降序输出可以在其后添加DESC关键字。
通过这个实验给大家展示一下这个“亲兄弟”间的排序功能。

1.回望关系“树”,这棵树中的B和C是亲兄弟,F和G是亲兄弟。注意,D和E不是亲兄弟,最多也就算是堂兄弟,“亲兄弟排序”功能对他们无效。

A
     / \
    B   C
   /   /
  D   E
 / \
F   G

2.上图对应的表数据

test=# select * from t1;                  
 x  | y | z 
----+---+---
 A  | 1 |  
 B  | 2 | 1
 C  | 3 | 1
 D  | 4 | 2
 E  | 5 | 3
 F  | 6 | 4
 G  | 7 | 4

3.我们对X列使用“ORDER SIBLINGS BY”进行升序排序,重点关注B和C、F和G的顺序。

test=# select lpad(' ',level-1)||x tree, SYS_CONNECT_BY_PATH(x,'/') tree_path from t1 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 行记录)

4.我们对X列使用“ORDER SIBLINGS BY DESC”进行降序排序,重点关注B和C、F和G的顺序。

test=# select lpad(' ',level-1)||x tree, SYS_CONNECT_BY_PATH(x,'/') tree_path from t1 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 行记录)

5.如在层次查询中错误的使用了“ORDER BY”进行排序,则层次查询中蕴含的遍历顺序将被打乱,剩下的将只是信息的罗列。

test=# select lpad(' ',level-1)||x tree, SYS_CONNECT_BY_PATH(x,'/') tree_path from t1 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 行记录)

6.小结
具体问题具体分析,特殊场合特出方法。在层次查询中如需对亲兄弟的先后顺序进行限定,就必须要使用特有的“ORDER SIBLINGS BY”而非“ORDER BY”子句。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值