SIBLINGS 是兄弟姐妹的意思,那么ORDER SIBLINGS BY的意思就是在兄弟姐妹之间的排序,和order by所表示的含义绝对不同,针对树状sql,我觉得ORDER SIBLINGS BY更有意义,树状sql查询出来的结果本身就是按照层次(hierarchy)结构排好序的,而加上关键字SIBLINGS 其实是在hierarchy内部进行排序。

You have to be careful when trying to order the rows of output in a hierarchical

query. By default, if you omit the ORDER BY clause altogether, the query attempts

to sort rows in an order that’s reflective of the hierarchy. Display will start first with

a LEVEL 1 row. If that row is superior to any LEVEL 2 rows, those rows will display

next before another LEVEL 1 row displays. The same approach is taken at LEVEL

2, so that rows will display down to leaf node levels before the next rows show at

the higher levels. The result is a display that is meaningful to the hierarchy. But if

you try to order these rows with the ORDER BY clause, you’ll create a syntactically

correct statement that probably doesn’t help you much

--===================================

上面是047教材中对ORDER SIBLINGS BY的描述,看的有点晕,下面看一个例子来理解一下SIBLINGS吧:

SQL> select * from t_tree_query;

NAME MID ID

---------- ---------- ----------

level999 0 1

level2 1 2

level3 2 3

level4 3 4

level5 4 5

level6_7 5 6

level6_6 5 7

level5 4 8

level6 8 9

level4 3 10

level5_12 10 11

NAME MID ID

---------- ---------- ----------

level5_11 10 12

level6 12 13

13 rows selected.

SQL>

表t_tree_query里的数据如上,字段mid是id的parent,name看成是id对应的名字,下面是一个树状sql的查询结果,目的是求mid=0也就是父亲id=0的所有孩子id的关系:

SQL> select name,level,mid,id ,lpad(' ',level*2)||id level_id,SYS_CONNECT_BY_PATH(id,'/') path

2 ,CONNECT_BY_ROOT id root_id

3 from t_tree_query

4 start with mid in (0)

5 connect by prior id = mid

6 ;

NAME LEVEL MID ID LEVEL_ID PATH ROOT_ID

---------- ---------- ---------- ---------- -------------------- --------------- ----------

level999 1 0 1 1 /1 1

level2 2 1 2 2 /1/2 1

level3 3 2 3 3 /1/2/3 1

level4 4 3 4 4 /1/2/3/4 1

level5 5 4 5 5 /1/2/3/4/5 1

level6_7 6 5 6 6 /1/2/3/4/5/6 1

level6_6 6 5 7 7 /1/2/3/4/5/7 1

level5 5 4 8 8 /1/2/3/4/8 1

level6 6 8 9 9 /1/2/3/4/8/9 1

level4 4 3 10 10 /1/2/3/10 1

level5_12 5 10 11 11 /1/2/3/10/11 1

NAME LEVEL MID ID LEVEL_ID PATH ROOT_ID

---------- ---------- ---------- ---------- -------------------- --------------- ----------

level5_11 5 10 12 12 /1/2/3/10/12 1

level6 6 12 13 13 /1/2/3/10/12/13 1

13 rows selected.

SQL>

查询的结果是按照mid和id的层次关系排好了序,但是我们希望在具有相同父亲的孩子之间按照name来排序,这样加上order siblings by name子句的查询结果如下:

SQL> select name,level,mid,id ,lpad(' ',level*2)||id level_id,SYS_CONNECT_BY_PATH(id,'/') path

2 ,CONNECT_BY_ROOT id root_id

3 from t_tree_query

4 start with mid in (0)

5 connect by prior id = mid

6 order siblings by name

7 ;

NAME LEVEL MID ID LEVEL_ID PATH ROOT_ID

---------- ---------- ---------- ---------- -------------------- --------------- ----------

level999 1 0 1 1 /1 1

level2 2 1 2 2 /1/2 1

level3 3 2 3 3 /1/2/3 1

level4 4 3 4 4 /1/2/3/4 1

level5 5 4 5 5 /1/2/3/4/5 1

level6_6 6 5 7 7 /1/2/3/4/5/7 1

level6_7 6 5 6 6 /1/2/3/4/5/6 1

level5 5 4 8 8 /1/2/3/4/8 1

level6 6 8 9 9 /1/2/3/4/8/9 1

level4 4 3 10 10 /1/2/3/10 1

level5_11 5 10 12 12 /1/2/3/10/12 1

NAME LEVEL MID ID LEVEL_ID PATH ROOT_ID

---------- ---------- ---------- ---------- -------------------- --------------- ----------

level6 6 12 13 13 /1/2/3/10/12/13 1

level5_12 5 10 11 11 /1/2/3/10/11 1

13 rows selected.

SQL>

观查一下name中level6_6和level6_7的位置发现他们的顺序发生了变化,他们的父亲都是mid=5,在不加order siblings by name之前,id=6在id=7之前,按照name排序之后,发现id=7在id=6前面了,大家也可以观查mid=10时id=11,12,13时的变化,发现加上siblings 之后父亲12会带着孩子13同时和11的顺序颠倒了。

注意siblings 的作用仅仅是兄弟姐妹之间的排序,不管加上siblings 与否,level999的位置始终是在第一位的。

oracle order siblings by,sql中ORDER SIBLINGS BY排序的含义相关推荐

  1. Hive sql 中 order by、sort by、distribute by、cluster by用法

    名词解释: 名词解释: order by Hive中的order by和数据库中的order by 功能一致,按照某一项或者几项排序输出,可以指定是升序或者是降序排序.它保证全局有序,但是进行orde ...

  2. SQL中order by里面可以加条件

    下面实现:ID列放在最前面,其他列按照null_flag desc进行排序 select table_id, COLUMN_NAME_ENG, null_flag,Mdms_flag from sys ...

  3. oracle 单记录函数,SQL中的单记录函数

    1.ASCII 返回与指定的字符对应的十进制数; SQL> select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ') space f ...

  4. oracle怎么用charindex,SQL中Charindex和Oracle中对应的函数Instr对比

    sql :charindex('字符串',字段)>0 charindex('administrator',MUserID)>0 oracle:instr(字段,'字符串',1,1) > ...

  5. oracle isnull的用法,SQL中的ISNULL函数使用介绍

    使用指定的替换值替换 NULL. 语法 ISNULL ( check_expression , replacement_value ) 参数 check_expression 将被检查是否为 NULL ...

  6. oracle raise_application_error mysql_Oracle PL/SQL中异常高级特性

    在OraclePL/SQL语句块中exception的异常处理部分是非常重要的组成部分,它决定了在PL/SQL语句块内部可执行部分在发生异常错误时,程序是友好地提示:程序遇到某些错误而无法执行,还是抛 ...

  7. oracle returning into,PL/SQL 中Returning Into的用法

    ORACLE的DML语句中可以指定RETURNING INTO语句.RETURNING INTO语句的使用在很多情况下可以简化PL/SQL编程,少一次select into语句. DELETE操作:R ...

  8. Oracle的括号转义字符,SQL中通配符、转义符与括号的使用

    一.搜索通配符字符的说明 可以搜索通配符字符.有两种方法可指定平常用作通配符的字符: 使用 ESCAPE 关键字定义转义符.在模式中,当转义符置于通配符之前时,该通配符就解释为普通字符.例如,要搜索在 ...

  9. oracle有无left函数,Sql 中的 left 函数、right 函数

    DB2中left()函数和right()函数对应oracle中的substr()函数 DB2 LEFT.RIGHT函数 语法:LEFT(ARG,LENGTH).RIGHT(ARG,LENGTH) LE ...

  10. oracle实现千分位,SQL中实现千分位的语句

    [转]git使用教程 Git使用教程 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的, ...

最新文章

  1. C什么k什么_K线图基础知识丨什么是K线散兵坑形态?K线散兵坑形态的操作与案例详解...
  2. eNSP模拟器RIP2动态路由,DHCP服务,ACL流控,组合使用的拓扑网络
  3. window.postMessage 跨窗口,跨iframe javascript 通信
  4. cocos2d-x3.0中数据类型vector,map、value
  5. 用java语言编写石头剪刀布获胜法_石头剪刀布Java实现
  6. 今天,Google 在中国终于光明正大地搞 AI 了!
  7. 到外企应聘如何准备英文简历(Tips for Resume)
  8. 使用 ActiveReports 报表工具,动态创建报表模板
  9. yuv420p 详解_YUV格式介绍
  10. hightopo案例分享|故宫人流量动态监控系统实现效果
  11. vue绑定背景图片有括号无法显示怎么办
  12. android 图片释放内存吗,手机内存不足?掌握这几招让手机瞬间释放几个G!
  13. x86_64汇编之三:x86_64汇编和x86_32汇编的区别
  14. 中国蚁剑的下载以及安装教程
  15. unity ugui android 小键盘,Unity inputfield 实现显示 隐藏密码功能(在安卓中切换不打开下虚拟键盘)...
  16. 渲染中的采样:从概率密度到图像处理
  17. R语言变量的处理(创建新变量 变量重新赋值
  18. 运维救火必备:问题排查与系统优化手册(结合惨案现身说法)
  19. java B2C电商系统架构
  20. 阿里云esc 服务器购买使用,超详细教程

热门文章

  1. 以下哪些是微型计算机,2017版计算机试题及答案
  2. BZOJ 1023 仙人掌图
  3. 谷歌身份验证器验证码不对怎么回事_兼容谷歌验证器,开源的动态验证码小程序了解一下
  4. Win系统 - 桌面图标:乖乖躺好别乱动!
  5. 卫生保健所短信群发模板:预约挂号、就诊提醒、检查结果通知
  6. css3(属性选择器,结构伪类选择器,伪元素选择器 ,css3盒子模型,滤镜filter, cale, 过渡transition))
  7. 最全电商分类信息(03)
  8. angular-----Activated路由
  9. 对数据驱动运营的理解
  10. PS 制作毛玻璃效果