分层查询是一种查询类型,它根据构成父子关系的数据按层次顺序返回结果集的行。
层次结构通常由一个倒置的树形结构表示。该树由相互连接的节点组成。每个节点可连接到一个或多个子节点,也可不连接到子节点。每个节点都连接到一个父节点,但没有父级的顶级节点之外。此节点为根节点。每个树都只有一个根节点。没有任何子级的节点称为叶节点。树始终至少有一个叶节点;例如,最简单的情况是树由单个节点组成。在这种情况下,该节点既是根又是叶。
在分层查询中,结果集的行表示一个或多个树的节点。
说明 单个给定行可能出现在多个树中,因而在结果集中会出现多次。
查询中的层次关系由 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(或其他运算符)。