小编Luk*_*der的帖子

是否有任何 SQL 方言允许 SELECT 子句的逻辑顺序?

SELECT 在 ISO/IEC 标准中,SQL 为子条款规定了以下语法顺序:

SELECT
    projection-expressions
FROM
    sources
WHERE
    predicate-expression
GROUP BY
    key-expression
HAVING
    predicate-expression
ORDER BY
    ordering-expressions
Run Code Online (Sandbox Code Playgroud)

虽然逻辑执行顺序是这样的:

FROM
    sources
WHERE
    predicate-expression
GROUP BY
    value-expression
HAVING
    value-expression
SELECT
    projection-expressions
ORDER BY
    ordering-expressions
Run Code Online (Sandbox Code Playgroud)

对于 SQL 的新手用户来说,即使它是首先声明的,在SELECT子句中定义的投影在WHEREor子句中不可用,这变得令人惊讶GROUP BY- 考虑到计算机程序通常遵循自上而下的执行顺序。

同样令人惊讶的是,SQL 作者需要在、 和子句中重复他们的表达式SELECT,或者使用不适合简洁查询的子查询。至少当用户熟悉实际的子句执行顺序时,他们知道为什么需要重复自己,但这并不能阻止它令人沮丧。WHEREGROUP BY

这个问题和其他相关问题记录在我发现的这篇文章中:https : //blog.jooq.org/a-beginners-guide-to-the-true-order-of-sql-operations/,这并不奇怪StackOverflow 上的 QA 有近 30,000 次查看:https : //stackoverflow.com/questions/3241352/using-an-alias-column-in-the-where-clause-in-postgresql

这让我想知道是否有任何 SQL 实现允许这种更“合乎逻辑”的子句排序。我注意到 .NET 中的 Linq 实际上确实遵循这个顺序,虽然我不会将它描述为真正的 SQL 实现,但实际上,在 Linq …

syntax

8
推荐指数
1
解决办法
522
查看次数

标签 统计

syntax ×1