oracle connect by的层级排序


 很久没有开始写博客了,今天开始了,反省以前做了很多项目,解决了一些问题,没有进行归纳,最后没有感觉到可以提炼出来的东西,

 因此归纳总结是今后一直要做的事。


 oracle 的connect by 相信大家都用了不少,但是很少进行深入的细化,以为已经用的很熟了,不需要做深化,这是误导自己,知识点尽量深化。


今天碰到了一个问题,写一个组织树,查询的时候要求即要保持层级的完整关系,又要求在层级内进行排序,

 

于是,百度了下,有这样一个语法


对于层次查询如果用order by排序,比如order by last_name则是先做完层次获得level,然后按last_name 排序,这样破坏了层次,比如特别关注某行的深度,按level 排序,也是会破坏层次的。在oracle10g中,增加了siblings 关键字的排序。



语法:order siblings by <expre>


它会保护层次,并且在每个等级中按expre排序。

 SELECT LEVEL AS 等级,  
        CONNECT_BY_ISLEAF AS 是否是叶子节点,  
        LPAD(' ', LEVEL * 2 - 1) || SYS_CONNECT_BY_PATH(ENAME, '=>'),  
        E.*  
   FROM EMP E  
 CONNECT BY PRIOR E.EMPNO = E.MGR   
  START WITH E.MGR IS NULL  
  ORDER SIBLINGS BY  E.ENAME;





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值