SELECT 语句的执行顺序

2015-01-11 14:47:29 +08:00
 leiliang
SELECT语句那么多子句,它们的执行顺序是怎么样的?网上看了些资料,说的都不一样,有没有权威点的资料呢?大神们来回答下这个问题吧!
5022 次点击
所在节点    MySQL
6 条回复
fasling
2015-01-11 15:04:32 +08:00
看这个 10个简单步骤,完全理解SQL http://blog.jobbole.com/55086/
sniper1211
2015-01-11 15:45:23 +08:00
1. FROM clause
2. WHERE clause
3. GROUP BY clause
4. HAVING clause
5. SELECT clause
6. ORDER BY clause
leiliang
2015-01-11 16:06:14 +08:00
@fasling @sniper1211 确定这是权威的顺序吗?
msg7086
2015-01-11 20:15:53 +08:00
@leiliang 每一步都会依赖上一步的结果。
我不知道你指的权威是什么意思,但是我觉得这算是比较常识的东西。
比如第一个FROM,是指定从哪个数据表取数据。
FROM不在第一个执行,那你去哪取数据来处理?
比如GROUP BY聚合,首先你要选出数据才能聚合吧,所以必然在WHERE之后。
比如HAVING聚合筛选,首先你先要聚合吧。
至于剩下的有一些,则是放在前后都可以的。
比如ORDER BY语句就可能会在SELECT之前执行。

SQL标准里可能会写必须按照哪个步骤来执行。
但是实际上每个数据库在实现的时候都会或多或少夹带些私货的。
如1楼链接里所提到的。
「注意:并非所有的数据库对 SQL 语句使用相同的解析方式。如 MySQL、PostgreSQL和 SQLite 中就不会按照上面第二点中所说的方式执行。」
omegaga
2015-01-12 00:52:36 +08:00
@sniper1211 逻辑上是这样的,不过事实上并不严格,比如where可能会跟from放到一起,像在SQL server里,SELECT * FROM A JOIN B ON A.id = B.id跟SELECT * FROM A, B WHERE A.id = B.id就是等价的
sniper1211
2015-01-12 09:51:48 +08:00
@leiliang 主要需要看逻辑上的顺序,还是加深理解。请参考 @fasling 的回答

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/161108

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX