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

递归是编程中的一种常用技术,通常是让函数自我调用,直到达成特定条件,再将结果逐层返回的方法,这里就不展开讲了。
什么是递归查询?
💡 假设现在需要生成从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编写,各数据库系统写法不同,仅作功能展示
- 0
- 0
-
分享