分层查询

分层查询是一种递归查询形式,它支持使用 CONNECT BY 子句从关系数据中检索层次结构,例如材料清单。

“连接”递归将同一个子查询用于种子值(起始)和递归步骤(连接)。 此组合提供了一种简明的方法来表示递归,例如材料清单、报告链或电子邮件线程。

出现循环时,“连接”递归将返回错误。 当行直接或间接生成自身时,将发生循环。 通过使用可选的 CONNECT BY NOCYCLE 子句,可以指示递归忽略重复的行,从而避免循环和错误。

子查询

分层查询支持包含对子查询的以下扩展。

  • 子查询包含 分层查询子句
  • 按如下顺序处理子选择的子句:
    1. FROM 子句
    2. 分层查询子句
    3. WHERE 子句
    4. GROUP BY子句
    5. HAVING子句
    6. SELECT 子句
    7. ORDER BY 子句
    8. OFFSET 子句
    9. FETCH 子句
  • 如果子选择包含分层查询子句,那么将对 WHERE 子句中谓词的处理顺序应用特殊的规则。 search-condition 与其 AND 条件 (结合) 一起计入谓词中。 如果某个谓词是隐式连接谓词(即,它引用了 FROM 子句中的多个表),那么将在分层查询子句之前应用该谓词。 任何最多引用了 FROM 子句中的一个表的谓词都将应用于分层查询子句的中间结果表。

    应该使用显式的连接表来编写涉及连接的分层查询,并通过 ON 子句来避免产生与 WHERE 子句谓词的应用相关的混淆。

  • 如果子查询包含 分层查询子句,那么可以指定 ORDER SIBLINGS BY 子句。 此子句指定顺序仅应用于层次结构中的胞代。