分层查询是一种查询类型,它根据构成父子关系的数据按层次顺序返回结果集的行。

层次结构通常由一个倒置的树形结构表示。该树由相互连接的节点组成。每个节点可连接到一个或多个子节点,也可不连接到子节点。每个节点都连接到一个父节点,但没有父级的顶级节点之外。此节点为根节点。每个树都只有一个根节点。没有任何子级的节点称为叶节点。树始终至少有一个叶节点;例如,最简单的情况是树由单个节点组成。在这种情况下,该节点既是根又是叶。

在分层查询中,结果集的行表示一个或多个树的节点。

说明 单个给定行可能出现在多个树中,因而在结果集中会出现多次。

查询中的层次关系由 CONNECTBY 子句描述,该子句构成了结果集中返回行的顺序的基础。下面显示了 CONNECT BY 子句及其关联的可选子句出现在 SELECT 命令中的上下文。

SELECT select_list FROM table_expression [ WHERE ...]
  [ START WITH start_expression ]
    CONNECT BY { PRIOR parent_expr = child_expr |
 child_expr = PRIOR parent_expr }
  [ ORDER SIBLINGS BY column1 [ ASC | DESC ]
      [, column2 [ ASC | DESC ] ] ...
  [ GROUP BY ...]
  [ HAVING ...]
  [ other ...]

select_list 是一个或多个表达式,它构成了结果集的字段。table_expression 是一个或多个表或视图,结果集的行源于这些表或视图。other 是任何其他合法的 SELECT 命令子句。与分层查询相关的子句 START WITH、CONNECT BY 和 ORDER SIBLINGS BY 将在以下各节中予以介绍。

说明 目前PolarDB PostgreSQL版(兼容Oracle)不支持在 CONNECT BY 子句中使用 AND(或其他运算符)。