SQL查询理论问题 - 单语句与多语句查询

Mic*_*ray 6 sql theory relational-algebra database-theory

当我编写SQL查询时,我发现自己常常认为"单一查询无法做到这一点".当发生这种情况时,我经常转向使用临时表(一种或另一种)的存储过程或多语句表值函数,最后简单地组合结果并返回结果表.

我想知道是否有人知道,仅仅作为理论问题,是否应该可以编写任何查询,将单个结果集作为单个查询(而不是多个语句)返回.显然,我忽略了代码可读性和可维护性等相关点,甚至可能是查询性能/效率.这更多是关于理论的 - 它可以做到......而且不用担心,当多语句在所有情况下更适合我的目的时,我当然不打算开始强迫自己编写单语句查询,但是它可能会让我思考是否有一个可行的方法来从单个查询获得结果.

我想一些参数是有序的 - 我正在考虑一个关系数据库(如MS SQL),其中的表遵循常见的最佳实践(例如所有具有主键的表等等).

注意:为了赢得"接受的答案",您需要提供明确的证明(参考网络资料或类似内容).

Jen*_*der 2

至少在Oracle的最新版本中是绝对可以的。它有一个“模型子句”,使 sql 图灵完整。(http://blog.schauderhaft.de/2009/06/18/building-a-turing-engine-in-oracle-sql-using-the-model-clause/)。当然,这都是有通常的限制的,即我们实际上并没有无限的时间和内存。

对于没有这些限制的普通 sql 方言,我认为这是不可能的。

我看不到如何在“普通 sql”中实现的任务是:假设一个表具有整数类型的单列

对于每一行,“获取当前行的值并返回那么多行,获取该值,返回那么多行,然后继续,直到连续两次获取相同的值并将其作为结果返回。”