SQL查询语句(where、jion、limit、group by、having等等)执行先后顺序

WHERE首先过滤数据。
GROUPBY 然后分组。
SELECT 然后选择列计算功能。
ORDERBY 排在最后。
LIMIT 明确限制了元素的数量。

粗略地说,执行顺序是固定的。
就用顺口溜写下来吧。
如何使用?你自己看看吧。

sql 语句中同时使用 top 、 where、 order by, 它们的执行顺序是怎样的

说实话,你这一段说的已经很清楚了,但是如果我接受采访的话,我可能会问你一些细节。
WHERE和ORDER BY的执行顺序本质上是正确的。
先过滤WHERE,然后排序ORDER BY。
但有趣的是,这个序列有时会令人沮丧。

例如,在Oracle中使用ROWNUM时,它的位置非常重要,因为它是在查询过程中分配的。
我曾经写过SQL,想用ROWNUM来进行分页。
由于ROWNUM是按顺序分配的,所以我发现先排序再拦截是错误的。
当时不太明白,后来查了文档,发现Oracle中的ROWNUM是在WHERE过滤之前对每一行数据进行标签,所以先用ORDER BY再用ROWNUM就会把一切搞乱。

另一个细节是过滤器顺序。
你说WHERE内部条件是从右到左处理的,但这其实有点歧义。
我曾经遇到过一个问题,我有两个条件 AND 在一起,一个是 status = 'active',另一个是 last_login > '2 02 3 -01 -01 '。
由于last_login的范围很广,您可能会认为先计算它会更快。
结果如何?这与数据库的实现有关。
一些系统可能从左到右解析,而另一些系统可能会优先考虑最有效的系统。
我专门在旧版本的 SQL Server 上对此进行了测试,它似乎是从左到右。
对于这一部分,我从未亲自运行过 PostgreSQL,但我建议您检查一下。

TOPN的问题类似。
创建 TOP 1 0 时,我应该先获取 1 0 行,还是应该先对它们进行排序,然后再获取它们?其实这和数据库优化器有关。
较旧版本的 Oracle(1 2 c 之前)首先导入,然后排序。
新版本(1 9 c)可以并行处理,先排序然后获取,这可能会带来更好的性能。
首先使用较旧版本的 SQL Server,但也可以使用较新版本。
因此,这些详细信息将根据具体数据库和版本的不同而有所不同。

说白了,SQL执行顺序的核心就是WHERE过滤、ORDER BY排序、TOP N阻塞。
但各个环节的小细节,比如Oracle的ROWNUM处理、条件解析顺序、TOP N实现等,确实是容易出错的点。
我在引进新人的时候反复强调了这几点。
说白了,如果不理解这些细节,你在写SQL时永远不会“几乎正确”。

SQL 之 ON 和 WHERE执行顺序

那天在咖啡厅,我看着窗外的雨滴,突然想起大学里的数据库课。
当时老师讲ON和WHERE的区别时,我就一头雾水。
现在想起来,那节课的例子似乎就在我眼前。

记得当时老师说ON是用来连接两个表的,WHERE是用来过滤数据的。
当时我就很困惑,为什么不能一起使用呢?接下来老师举了一个例子,说当你去超市购物时,ON就像一个购物车,WHERE就像一个购物清单。

当时我还小,不懂太多,就随便听了一下。
现在回想起来,那节课似乎在说,虽然ON和WHERE都是用来做事的,但它们的功能和时机是不同的。
ON 就像首先选择购物车,而 WHERE 就像根据列表选择产品。

时间过得真快。
一转眼,我工作了十年。
那天在酒吧,我突然想到ON和WHERE什么时候生效。
真的如老师所说ON在WHERE之前吗?等等,还有一件事。
记得有一次在项目中我明明把过滤条件设置为ON,但是数据还是被过滤了。
难道是我理解错了?
现在想想,你可能需要根据你的具体情况来考虑ON和WHERE的时机。
就像酒吧里的雨滴一样,有时先打湿地面,有时先落在树叶上。
那么,ON 或 WHERE 哪个先生效呢?