理解sql语句的执行顺序对优化sql非常重要,那么sql语句的执行顺序是怎样的呢,以一条简单的的语句做分析:
这一条语句包含我们经常用到的一些关键字,select,from,where,group by,order by,它的执行顺序如下:
先执行from关键字后面的语句,明确数据的来源,它是从哪张表取来的。
接着执行where关键字后面的语句,对数据进行筛选。
再接着执行group by后面的语句,对数据进行分组分类。
然后执行select后面的语句,也就是对处理好的数据,具体要取哪一部分。
最后执行order by后面的语句,对最终的结果进行排序。
关于这个顺序,我们可以用别名来做一个判断:
左图给emp_sex取了个别名sex,然后order by后面使用了这个别名,能正常的查到数据,说明order by的执行是在select之后。再看右边的这个图,笔者接着在group by后面也使用了sex别名,点击查询后提示错误:列名‘sex’无效。说明group by的执行是在select之前。
至此我们有了初步的结论group by > select > order by。
接下来笔者也给表取了个别名,然后在where和group 后面引用这个别名。
sql正常执行,说明where和group by语句均在from语句之后执行。也就是,from > where 和 from > group by
最后只剩下where和group by的比较了,这个无法用表别名来判断,笔者目前想到的是‘常识’。这个常识就是:分组之前的过滤用where,分组之后的过滤用having。可见,where的执行是在group by之前的,即 where > group by。
根据数学知识,由
group by > select > order by
from > where
from > group by
where > group by
可得 from > where > group by > select > order by。这就是一条基本sql的执行顺序。
转载于:https://my.oschina.net/u/3348790/blog/1083493