暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

南大通用GBase8s 常用SQL语句(217)

大拇指的胜利 2022-07-21
574

层级查询子句

层级子句对表对象上的递归查询设置条件,在该表对象的行之中,存在父子依赖的层级。包括此子句的 SELECT 语句称为层级查询

必须在 SELECT 语句的 FROM 子句中指定在其上进行层级查询操作的表对象。该表对象通常是自引用表,在其中一个或多个列作为同一表中另一列(或这些列的子集)的外键约束。

层级查询对若干行进行操作,在其中一个或多个列值对应于父子关系的逻辑结构之内的节点。如果父行有多个孩子,则在同一父母的孩子行之中存在兄弟关系。例如,这些关系可能反映一个组织的部门和管理级别之内的员工与管理者之中的报告结构。

此子句支持的语法是对 SQL 的 ANSI/ISO 标准的扩展。

语法

层级子句


必须在 SELECT 语句的 FROM 子句中指定层级查询在其上操作的那些表对象。该表对象可为下列表对象中的任何一种:

表或可更新的视图

临时表

该会话连接到的同一 GBase 8s 实例的另一数据库中的表

作为查询的结果的派生的表

受到基于标签的访问控制(LBAC)安全策略保护的表

带有列级加密或行级加密的表

任何其他表对象的同义词。

在层级查询的 FROM 子句中,不支持下列表对象:

两个或多个表的连接

不可更新的视图

远程 GBase 8s 实例的数据库中的表

CREATE EXTERNAL TABLE 语句定义了的外部表

序列对象。

GBase 8s 支持在层级查询的 projection 列表中的序列对象,在 WHERE 子句中,以及在表达式在 SELECT 语句中为有效的其他上下文中,但不在层级查询子句中。

在相关联的子查询和在不相关联的子查询中,层级子句是无效的。

层级查询可包括所有类型的优化程序伪指令,这些是例外:

连接顺序伪指令

连接方法伪指令

层级查询不支持 GBase 8s 的“并行数据库查询”(PDQ)特性。

层级子句可在表上指定递归的查询,该表的行描述父子关系的层级。

该层级可为简单的层级,诸如组织的报告结构,其中每个非根的节点向该层级之内的高级的单个节点报告。 (在 GBase 8s 的 LBAC 安全特性中,TREE 类型的安全标签组件有简单的层级的逻辑结构。)

层级子句可查询更复杂拓扑的数据层级,其中的节点有多对多关系,且其中的孩子节点可为其父母的祖先。要了解关于使用层级子句来查询在数据层级之内有循环的信息,请参阅 CONNECT BY 子句。

重要: 层级查询对某些数据集合最为有效,其中的表内的父子依赖有简单图的逻辑拓扑。如果自引用表包括对相同列集合的多个独立的层级,或如果任何孩子行还是其父母的祖先,则请参阅 不是简单图的依赖样式。

注: 层级子句与表层级无关,在一系列类型表的模式之中存在父子关系的层级。类似地,全都来自通用基础类型的一系列 DISTINCT 数据类型的层级与数据层级类似,但与层级子句无关,层级存在于数据实体之间的父子依赖中,而不是数据类型之中的关系。

特定于层级查询的 SQL 语法

除了为包含层级数据的表的递归查询指定条件的 START WITH、CONNECT BY 和 CONNECT NOCYCLE BY 关键字之外,层级查询还支持那些仅在层级查询中才有效的语法令牌,以及在没有 CONNECT BY 子句的 SELECT 语句中不可使用的语法令牌。 特定于层级查询的语法令牌包括两个运算符、三个伪列和一个内建的函数:

CONNECT_BY_ROOT 运算符

此运算符可为其运算对象的根祖先返回一表达式。

PRIOR 运算符

此运算符可引用从前一递归步骤返回的值(此处的“步骤”是指该递归查询的一次迭代)。

LEVEL 伪列

此伪列返回一整数,指示该层级之内递归查询的哪一步骤返回了行。

CONNECT_BY_ISCYCLE 伪列

此伪列可指示一行是否有一个还是其祖先的孩子。

CONNECT_BY_ISLEAF 伪列

此伪列可指示一行在查询返回的行之中是否有任何的孩子。

SYS_CONNECT_BY_PATH 函数

此函数可构建和返回一字符串,该字符串表示从指定的行到层级的根的路径

在 ORDER BY 子句中的 SIBLINGS 关键字

ORDER SIBLINGS BY 子句可对返回的每个级别的同一父母的兄弟行进行排序。    

伪列是在特定的上下文中 SQL 解析器可识别的内建的标识符,共享同一命名空间作为列和变量。通常在 SELECT 语句的 Projection 子句中指定这些伪列和 SYS_CONNECT_BY_PATH 函数,但可在层级子句中指定 LEVEL 伪列和 PRIOR 运算符。

要获取仅支持层级查询的这些令牌的语法和语义的详细信息,请参阅 在 CONNECT BY 子句中的条件 和 ORDER SIBLINGS BY 子句。

 

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论