GBase8s数据库select有ORDER BY 子句6

ORDER SIBLINGS BY 子句

ORDER SIBLINGS BY 子句仅在层级查询中是有效的。 可选的 SIBLINGS 关键字指定首先对父行

排序,以及然后对该层级之内每个级别的每一父行的孩子行进行排序的顺序。

有些行有 SIBLINGS BY 关键字之后指定的列中的值的重复列表,这些行在带有相同的值列表和相

同的父行的那些行之中是任意排序的。如果层级查询包括不带有 SIBLINGS 关键字的 ORDER BY 子

句,则根据那些跟在 ORDER BY 关键字之后的排序规范来排列行的顺序。在层级查询中,既不需要

ORDER BY 子句,也不需要 ORDER BY 子句的 ORDER SIBLINGS BY 选项。

在下列示例中的层级查询返回层级数据集中的行的子集,其根为 Goyal,如主题 层级查询子句 中

罗列的那样。 此查询包括 ORDER SIBLINGS BY 子句来按照 name 对那些报告给同一管理者的

员工进行排序:

SELECT empid, name, mgrid, LEVEL

FROM employee

START WITH name = ‘Goyal’

CONNECT BY PRIOR empid = mgrid

ORDER SIBLINGS BY name;

以下列顺序对此查询返回的行进行排序:

empid name mgrid level

16 Goyal 17 1

12 Henry 16 2

7 O’Neil 12 3

9 Shoeman 12 3

8 Smith 12 3

14 Scott 16 2

11 Zander 16 2

6 Barnes 11 3

5 McKeough 11 3

9 row(s) retrieved.

在此,START WITH 子句返回了在此层级的根部的 Goyal 行。 两个后续的 CONNECT BY 步骤

(在 level 伪列中标记为 2 和 3)返回三个兄弟行的集合:

Henry、Scott 和 Zander 是其父母为 Goyal 的兄弟;

O’Neil、Shoeman 和 Smith 是其父母为 Henry 的兄弟;

Barnes 和 McKeough 使其父母为 Zander 的兄弟。

下一 CONNECT BY 步骤未返回行,因为符合 level = 3 的那些行是此层级中的叶节点。在该查

询的此执行点上,将 ORDER SIBLINGS BY 应用于结果集,按上述顺序对这些行排序。

由于该排序键 name 为 VARCHAR 列,因此在每一兄弟的集合之内的返回的行都按照它们的

employee.name 值的 ASCII 顺序排列。仅在返回的行的层级中为叶节点的那些兄弟的集合在排序

的结果集中连续地出现,因为管理者紧跟在向他们报告的员工之后,而不是他们的兄弟。此示例中

的例外是 Scott,其孩子节点形成空集。

ORDER BY 子句中的 SIBLINGS 关键字是对 SQL 语言的 ISO 标准语法的扩展。如果您在不包

括有效的 CONNECT BY 子句的查询或子查询的 ORDER BY 子句中包括 SIBLINGS 关键字,则

SELECT 语句失败并报错。

要获取更多关于层级查询和 CONNECT BY 子句的信息,请参阅 层级查询子句。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值