SQL 不只 SELECT * FROM xxx。1999 年递归 CTE 让它成了图灵完备语言——下面每个画面,都是你浏览器里的 DuckDB 用真 SQL 现场算出来的。
普通 SQL 只会查数。加了 WITH RECURSIVE 之后,它能像程序一样反复执行自己——循环,是写任何游戏和图形算法的第一步。
WITH RECURSIVE t(i) AS (
SELECT 1 -- 种子:第一行
UNION ALL
SELECT i + 1 -- 递归:拿上一行 +1
FROM t
WHERE i < 5 -- 终止条件
)
SELECT * FROM t; -- 1,2,3,4,5
拖动滑块改变上限,点「运行」——下面这一列数字,是数据库自己循环出来的。
坐标轴上的每个点对应一个复数 c,反复算 z = z² + c。冲出去的出局,留下的连成那个无限精细的分形。几百万次迭代,全在一条递归 CTE 里。
棋盘是一张表,活细胞是一行记录。点棋盘可增减细胞;每点一次「演化一代」,就有一条 SQL 统计每个格子的邻居数,算出下一代。这就是 SQL 版的游戏循环。
DuckDB 已经在浏览器里跑起来了。随便改下面的查询,点「运行」看结果。