在(Postgre)SQL语句中,何时/何时子句顺序重要

在(Postgre)SQL语句中,何时/何时子句顺序重要,sql,postgresql,syntax,Sql,Postgresql,Syntax,首先,我发誓我试过搜索这个,甚至检查了PostgreSQL文档,但是ORDERBY子句的存在使得找到关于任何其他排序类型的答案都很困难 每个人都知道SQL语句都有一个顺序,例如,您将FROM子句放在SELECT子句之后。它本身甚至按顺序列出了SELECT的所有可能子句 然而,我想,也许这是基于其他SQL数据库?子句的顺序只对程序员重要,或者至少主要是重要的,数据库本身并不关心是否将限制放在了顺序之前,反之亦然 那么,一个简单的问题:条款顺序是否总是重要的,并且必须严格遵循PostgreSQL页面

首先,我发誓我试过搜索这个,甚至检查了PostgreSQL文档,但是ORDERBY子句的存在使得找到关于任何其他排序类型的答案都很困难

每个人都知道SQL语句都有一个顺序,例如,您将FROM子句放在SELECT子句之后。它本身甚至按顺序列出了SELECT的所有可能子句

然而,我想,也许这是基于其他SQL数据库?子句的顺序只对程序员重要,或者至少主要是重要的,数据库本身并不关心是否将限制放在了顺序之前,反之亦然


那么,一个简单的问题:条款顺序是否总是重要的,并且必须严格遵循PostgreSQL页面上的列表,或者条款顺序根本不重要,但是如果你把事情搞砸了,你的同事会觉得你很可笑,或者只是有时候才重要,如果是这样的话,规则是什么,SELECT语句中子句的顺序很重要

您链接到的文档按一定顺序显示它们,这是必需的。这些条款中的每一条都是可选的,但如果有,则必须按照正确的顺序编写

部分原因可能是SQL语言的建模理念听起来像一种自然语言,虽然说它符合语法

SELECT items FROM shelf WHERE level > 3;
SELECT items WHERE level > 3 FROM shelf;
这样说不合乎语法

SELECT items FROM shelf WHERE level > 3;
SELECT items WHERE level > 3 FROM shelf;
当然,SQL在自然语言意义上是不符合语法的,但我认为这是动机的一部分

还要注意,执行的逻辑顺序与语句的编写方式不同:


首先计算CTE,然后是FROM子句,然后应用WHERE筛选器,然后是GROUP BY,然后是HAVING,然后是SELECT list,然后是窗口函数,然后是ORDER BY,然后是OFFSET和FETCH First n ROWS ONLY/LIMIT。我可能忘记了一些事情。

子句的排序很重要,并且在SQL标准中定义。我想不出任何数据库支持的SELECT中子句排序的例外情况。也就是说,这是非常基本的。这听起来像是一个答案,而不是一个评论:是的,我已经有一段时间没有手工编写SQL语句了,所以很可能我的记忆力不好,但我只是想检查一下,看看到底有多差,这样我就可以正确地向别人解释了。回答得好,谢谢。只需显示查询生成器和ORM对原始SQL知识造成的损害: