分层查询
分层查询是一种递归查询形式,它支持使用 CONNECT BY 子句从关系数据中检索层次结构,例如材料清单。
“连接”递归将同一个子查询用于种子值(起始)和递归步骤(连接)。 此组合提供了一种简明的方法来表示递归,例如材料清单、报告链或电子邮件线程。
出现循环时,“连接”递归将返回错误。 当行直接或间接生成自身时,将发生循环。 通过使用可选的 CONNECT BY NOCYCLE 子句,可以指示递归忽略重复的行,从而避免循环和错误。
子查询
分层查询支持包含对子查询的以下扩展。
- 子查询包含 分层查询子句
- 按如下顺序处理子选择的子句:
- FROM 子句
- 分层查询子句
- WHERE 子句
- GROUP BY子句
- HAVING子句
- SELECT 子句
- ORDER BY 子句
- OFFSET 子句
- FETCH 子句
- 如果子选择包含分层查询子句,那么将对 WHERE 子句中谓词的处理顺序应用特殊的规则。 search-condition 与其 AND 条件 (结合) 一起计入谓词中。 如果某个谓词是隐式连接谓词(即,它引用了 FROM
子句中的多个表),那么将在分层查询子句之前应用该谓词。 任何最多引用了
FROM 子句中的一个表的谓词都将应用于分层查询子句的中间结果表。
应该使用显式的连接表来编写涉及连接的分层查询,并通过 ON 子句来避免产生与 WHERE 子句谓词的应用相关的混淆。
- 如果子查询包含 分层查询子句,那么可以指定 ORDER SIBLINGS BY 子句。 此子句指定顺序仅应用于层次结构中的胞代。