首页 > 解决方案 > 何时在(Postgre)SQL 语句中使用/不使用子句顺序

问题描述

(首先,我发誓我尝试搜索这个,甚至检查了 PostgreSQL 文档,但是该ORDER BY子句的存在使得找到关于任何其他类型排序的答案变得困难。)

每个人都知道 SQL 语句有顺序,并且您将(例如)您的子句放在您的FROM子句之后SELECTPostgreSQL SELECT 文档页面本身甚至按顺序列出了所有可能的 a子句SELECT

但是,我认为(也许这是基于其他 SQL 数据库?)子句的顺序只对程序员很重要,或者至少大部分只重要,而且数据库本身并不关心你是否把你放在你的LIMIT前面ORDER BY, 或相反亦然。

所以,一个简单的问题:子句顺序是否总是重要的,必须严格遵循 PostgreSQL 页面上的列表,还是子句顺序根本不重要(但如果你搞砸了,你的同事会觉得你很有趣),还是仅在某些时候才重要(如果是,那么它的“规则”是什么)?

标签: sqlpostgresqlsyntax

解决方案


是的,SELECT语句中子句的顺序很重要。

您链接到的文档以强制的特定顺序显示它们。这些子句中的每一个都是可选的,但如果它们在那里,它们必须以正确的顺序编写。

部分原因可能是 SQL 语言被建模为听起来像自然语言的想法,虽然它是语法上说

SELECT items FROM shelf WHERE level > 3;

说不合语法

SELECT items WHERE level > 3 FROM shelf;

当然 SQL 在自然语言意义上不是语法的,但我认为这是动机的一部分。

另请注意,(逻辑)执行顺序与语句的编写方式不同:

首先计算 CTE,然后是FROM子句,然后WHERE应用过滤器,GROUP BY然后是HAVING,然后是SELECT列表,然后是窗口函数,然后ORDER BY是 ,然后是OFFSETFETCH FIRST n ROWS ONLY/ LIMIT(我可能忘记了一些东西)。


推荐阅读