在数据库中,树形或层级结构的数据非常常见,如组织架构、分类目录、评论回复等。SQL 提供了递归查询的能力,通过递归通用表表达式(CTE),可以高效地查询和处理树形数据。本文将通过实际案例详细讲解递归 SQL 的应用。
一、递归 SQL 基本概念
1. 什么是递归 SQL?
递归 SQL 是指在 SQL 查询中,自我引用以遍历层级结构或处理递归关系的一种方式。
MySQL 8.0、PostgreSQL 和 SQL Server 等数据库均支持递归查询。
2. 递归 CTE 基本语法
WITH RECURSIVE cte_name (column1, column2, ...) AS (
-- 非递归部分(初始查询)
初始查询
UNION ALL
-- 递归部分(递归查询)
递归查询(引用 cte_name 本身)
)
SELECT * FROM cte_name;
解释:
- 非递归部分:查询递归的起点(通常是树的根节点)。
- 递归部分:查询每一层的子节点或下级关系。
- UNION ALL:将递归结果逐层叠加,直到递归终止。
二、实战案例:组织架构树
1. 数据表结构 employees
id
name
manager_id
position
1
Alice
NULL
CEO
2
Bob
1
CTO
3
Carol
1
CFO
4
David
2
Engineer
<