Ran's note

Ran's note

公共表表达式(CTE)-递归查询

2024-10-11
公共表表达式(CTE)-递归查询

递归是编程中的一种常用技术,通常是让函数自我调用,直到达成特定条件,再将结果逐层返回的方法,这里就不展开讲了。

什么是递归查询?

💡 假设现在需要生成从1900年到2024年为止的所有年份数据,每行一年。

像上述这种滚动生成数据的操作在编程中可以使用循环来完成,SQL中没有循环,那么就可以使用递归来完成。

递归查询类似递归函数,都是通过引用自己,再对数据加工处理逐级返回的方式生成数据。

如何使用递归查询?

在SQL中实现递归就需要使用到CTE。什么是CTE?

我们知道在CTE中可以引用声明过的CTE,不仅如此CTE还可以在自己的表达式中引用自己。

以上面提到的生成年份的假设为例,使用上面的SQL即可查询出所有1900到2024的年份

-- 递归查询
WITH TMP (Y) AS (
    -- 初始数据
	VALUES 1900
	
	UNION ALL
	
    -- 递归数据处理
	SELECT Y + 1 FROM TMP 
    -- 生成条件
	WHERE Y < 2024
	
)
SELECT * FROM TMP;

上述SQL使用DB2编写,各数据库系统写法不同,仅作功能展示