哪些计算不能在标准 SQL 中执行?

jl6*_*jl6 2 sql-standard

我知道循环不能用标准 SQL 表示。它不能执行哪些其他形式的处理?

one*_*hen 6

循环不能用标准 SQL 表示

事实并非如此。该标准的相关部分称为SQL/PSM(持久存储模块)。它的程序范式包括“循环”。

然而,考虑到至少从 SQL-92 开始,核心标准 SQL 已经是关系完整的(根据Codd对该术语的定义),允许任意复杂性的“计算”。此外,SQL 查询更像是一个规范而不是一个实现,即说明 DBMS 执行它认为合适的意图,这本身可能涉及“循环”。


Con*_*lls 6

我认为在这里注意到关系代数 <> SQL 可能是合适的。关系代数(Codd 的论文“大型共享数据库的关系数据模型”中描述的关系数据库的理论基础)不是图灵完备的。该模型具有哥德尔完备性的特性这使得它在表达能力上等同于一阶谓词演算——普通逻辑表达式对你我来说。

然而,大多数 SQL 方言都有各种结构,包括递归 CTE 和存储过程中的流控制,这使得它们有效地实现了图灵完备。 图灵完备语言可以表达任何可以用算法描述的计算。

值得注意的是,严格定义图灵完备性需要无限存储,这在物理上是不可能的。然而,当将编程语言描述为图灵完备时,这个要求通常会被非正式地放宽。