递归查询是 SQL 中非常强大的一种功能,它用于处理具有层次结构或树形结构的数据。在 Oracle 中,递归查询主要通过 START WITH 和 CONNECT BY 子句实现,这是 Oracle 的传统方法。从 Oracle 11g Release 2 开始,它也支持 ANSI SQL 标准的 WITH 子句(即公共表表达式 CTE)形式的递归查询。
我将重点介绍最常用、也是 Oracle 特色的 START WITH ... CONNECT BY 语法,并简要对比标准的递归 CTE 方法。
一、核心概念与语法 (START WITH … CONNECT BY)
这种语法专门为处理层次查询而设计,非常直观和高效。
基本语法结构:
SELECT [LEVEL], column1, column2, ...
FROM table_name
[WHERE ...]
START WITH condition -- 指定层次结构的根节点(起点)
CONNECT BY [PRIOR] condition -- 定义父节点和子节点之间的关系
[ORDER SIBLINGS BY column_name]; -- 按兄弟节点排序
关键元素解释:
-
LEVEL伪列:- 这是一个系统自动生成的伪列,它表示当前行在树形结构中的层级。
- 根节点的
LEVEL为 1,根节点的直接子节点为 2,以此类推。
-
START WITH子句:- 用于指定递归开始的根节点(一行或几行)。
- 例如:
START WITH employee_id = 100表示从员工 ID 为 100 的 CEO 开始构建树。
-
CONNECT BY子句:- 这是递归查询的核心,它定义了父行和子行之间的关系。
PRIOR运算符:至关重要。它引用的是父行的列。CONNECT BY PRIOR child_id = parent_id:表示上一行的child_id等于当前行的

最低0.47元/天 解锁文章
1107

被折叠的 条评论
为什么被折叠?



