http://blog.itpub.net/519536/viewspace-624176

有关层次查询之前的文章参考如下。
【层次查询】Hierarchical Queries之“树的遍历”
http://space.itpub.net/519536/viewspace-623809
【层次查询】Hierarchical Queries之LEVEL应用
http://space.itpub.net/519536/viewspace-623916
【层次查询】Hierarchical Queries之CONNECT_BY_ISCYCLE伪列
http://space.itpub.net/519536/viewspace-624032
【层次查询】Hierarchical Queries之CONNECT_BY_ISLEAF伪列
http://space.itpub.net/519536/viewspace-624075
【层次查询】Hierarchical Queries之SYS_CONNECT_BY_PATH函数
http://space.itpub.net/519536/viewspace-624099
【层次查询】Hierarchical Queries之寻根问祖(CONNECT_BY_ROOT一元运算符)
http://space.itpub.net/519536/viewspace-624114

在层次查询中,如果想让“亲兄弟”按规矩进行升序排序就不得不借助ORDER SIBLINGS 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”子句。切记之。

Good luck.

secooler
10.01.03

-- The End --

【层次查询】Hierarchical Queries之亲兄弟间的排序(ORDER SIBLINGS BY)的更多相关文章

  1. Oracle层次查询start with connect by

    博客参考:https://www.cnblogs.com/jerryxing/articles/2339352.html start with connect by 层次查询(Hierarchical ...

  2. .Net程序员学用Oracle系列(20):层次查询(CONNECT BY)

    1.层次查询语句 1.1.CONNECT BY 语法 1.2.CONNECT BY 示例 2.层次查询函数 2.1.SYS_CONNECT_BY_PATH 2.2.WMSYS.WM_CONCAT 2. ...

  3. SQL之层次查询

    层次查询是一种确定数据行间关系的一种操作手段.层次查询遍历的是一个树形结构.基本语法如下,以下语法嵌入到标准SQL中即可达到层次查询的目的: level,... ...[注释:伪列,用于select子 ...

  4. Oracle层次查询

    Oracle层次查询的语法如下: 下面根据两道“烧脑”的题具体来体现: 1. 根据时间先后顺序,十二星座的英文名称用逗号串起来为'Aries,Taurus,Gemini,Cancer,Leo,Virg ...

  5. 多词查询(Multi-word Queries)

    如果我们一次只能搜索一个词,那么全文搜索就会显得相当不灵活.幸运的是,通过match查询来实现多词查询也同样简单: GET /my_index/my_type/_search { "quer ...

  6. oracle层次查询的陷阱

    今天开发组同事找到我,说一个简单的层次查询非常慢,业务就是有一个存设备表连接关系的表,从node1连入,从node2连出,现在要找出node2的连出顺序,sql类似于: SELECT LEVEL ID ...

  7. 【转载】Oracle层次查询和分析函数

    摘要 一组连续的数,去掉中间一些数,如何求出剩下的数的区间(即号段)?知道号段的起止,如何求出该号段内所有的数?知道一个大的号段范围和已经取过的号段,如何求出可用的号段?利用Oracle提供的强大的查 ...

  8. Oracle层次查询和分析函数在号段选取中的应用

    转自:http://www.itpub.net/thread-719692-1-1.html 摘要一组连续的数,去掉中间一些数,如何求出剩下的数的区间(即号段)?知道号段的起止,如何求出该号段内所有的 ...

  9. Oracle - 层次查询

    如果表中含有层次数据,可以通过使用层次查询有序地查看层次数据. 语法: condition:指一个或多个表达式和逻辑(布尔)运算符的组合,并返回TRUE.FALSE或UNKNOWNstart with ...

随机推荐

  1. loj2001 「SDOI2017」树点涂色

    there #include <iostream> #include <cstdio> using namespace std; int n, m, dfn[100005], ...

  2. day01_09.你已学会编程

    目前你已经学会编程: 学会变量,运算,控制,你就学会了编程,我擦?真的,假的? 1.打印1-100,自己试试看呗 <?php $num = 1; while($num<=100){ ech ...

  3. 后台线程读取指定的web.config

    //读取配置文件,订单地址修改接口地址 ExeConfigurationFileMap configMap = new ExeConfigurationFileMap(); configMap.Exe ...

  4. mq类----1

    MQ.php <?php /** * Created by PhpStorm. * User: brady * Date: 2017/12/6 * Time: 14:42 * * amqp协议操 ...

  5. Spring 依赖注入(二、注入参数)

    注入参数基本分7类: 1.基本类型值 2.注入bean 3.内部bean 4.注入null值 5.级联属性 6.List,Set,Map集合的注入 7.properties文件的注入(和集合注入基本是 ...

  6. 【Luogu】P2146软件包管理器(树链剖分)

    题目链接 上午跟rqy学了一道超难的概率题,准备颓一会,于是水了这么一道水题. 话说这题真的是模板啊.数据范围正好,描述特别贴近(都不给你绕弯子的),连图都给你画出来,就差题目描述加一句“树链剖分模板 ...

  7. FWT 学习笔记

    FWT学习笔记 好久以前写的,先粘上来 定义数组 \(n=2^k\) \(A=[a_0,a_1,a_2,a_3,...,a_{n-1}]\) 令\(A_0=[a_0,a_1,a_2,...,a_{\f ...

  8. 一款多功能的移动端滚动选择器,支持单选到多选、支持多级级联、提供自定义回调函数、提供update函数二次渲染、重定位函数、兼容pc端拖拽等等..

    https://github.com/onlyhom/mobileSelect.js/blob/master/docs/README-CN.md mobileSelect.js 一款多功能的移动端滚动 ...

  9. Linux 之 LNMP服务器搭建-前期准备

    LNMP服务器搭建-前期准备 参考教程:[千峰教育] 系统环境: 系统:centos 6.8. 软件安装位置: (1)软件源代码包存放位置:/lnmp/src 命令:mkdir -p /lnmp/sr ...

  10. Linux 之 Vim常用命令

    Vim常用命令 参考教程:[千峰教育] 终端编辑命令工具: vi/vim.emacs等. vim简介: vim是vi的扩展,被誉为终端编辑之神. vim安装: yum install -y vim 工 ...