SQL 图灵完备实验室

SQL 不只 SELECT * FROM xxx。1999 年递归 CTE 让它成了图灵完备语言——下面每个画面,都是你浏览器里的 DuckDB 用真 SQL 现场算出来的。

DuckDB-WASM · 纯浏览器运行 · 无需服务器

先看懂:递归 CTE 给了 SQL 一个「循环」

普通 SQL 只会查数。加了 WITH RECURSIVE 之后,它能像程序一样反复执行自己——循环,是写任何游戏和图形算法的第一步。

递归 CTE 最小例子(数到 5)
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

动手一:让 SQL 自己数数

拖动滑块改变上限,点「运行」——下面这一列数字,是数据库自己循环出来的。

点击「运行 SQL」让数据库开始数数…
执行的 SQL

动手二:一条 SQL 画出曼德博集合

坐标轴上的每个点对应一个复数 c,反复算 z = z² + c。冲出去的出局,留下的连成那个无限精细的分形。几百万次迭代,全在一条递归 CTE 里。

预设:
分辨率 120 × 80 最大迭代 50 耗时 —
执行的 SQL

动手三:SQL 驱动康威生命游戏

棋盘是一张表,活细胞是一行记录。点棋盘可增减细胞;每点一次「演化一代」,就有一条 SQL 统计每个格子的邻居数,算出下一代。这就是 SQL 版的游戏循环。

图案:
第 0 代
演化一代用的 SQL

自由查询台:写你自己的 SQL

DuckDB 已经在浏览器里跑起来了。随便改下面的查询,点「运行」看结果。