SELECT语句那么多子句,它们的执行顺序是怎么样的?网上看了些资料,说的都不一样,有没有权威点的资料呢?大神们来回答下这个问题吧!

1 fasling Jan 11, 2015 看这个 10个简单步骤,完全理解SQL http://blog.jobbole.com/55086/ |
2 sniper1211 Jan 11, 2015 1. FROM clause 2. WHERE clause 3. GROUP BY clause 4. HAVING clause 5. SELECT clause 6. ORDER BY clause |
3 leiliang OP @fasling @sniper1211 确定这是权威的顺序吗? |
4 msg7086 Jan 11, 2015 @leiliang 每一步都会依赖上一步的结果。 我不知道你指的权威是什么意思,但是我觉得这算是比较常识的东西。 比如第一个FROM,是指定从哪个数据表取数据。 FROM不在第一个执行,那你去哪取数据来处理? 比如GROUP BY聚合,首先你要选出数据才能聚合吧,所以必然在WHERE之后。 比如HAVING聚合筛选,首先你先要聚合吧。 至于剩下的有一些,则是放在前后都可以的。 比如ORDER BY语句就可能会在SELECT之前执行。 SQL标准里可能会写必须按照哪个步骤来执行。 但是实际上每个数据库在实现的时候都会或多或少夹带些私货的。 如1楼链接里所提到的。 「注意:并非所有的数据库对 SQL 语句使用相同的解析方式。如 MySQL、PostgreSQL和 SQLite 中就不会按照上面第二点中所说的方式执行。」 |
5 omegaga Jan 12, 2015 via Android @sniper1211 逻辑上是这样的,不过事实上并不严格,比如where可能会跟from放到一起,像在SQL server里,SELECT * FROM A JOIN B ON A.id = B.id跟SELECT * FROM A, B WHERE A.id = B.id就是等价的 |
6 sniper1211 Jan 12, 2015 |