SQL语句的执行顺序

SQL语言是一门非常简单的语言,编写SQL只要理解其执行逻辑就能写出正确的SQL语句!

SQL语句和其他的编程语言最明显的区别是处理代码的执行顺序,大多数的编程语言,代码是按照编码顺序被处理,但是SQL语句的执行顺序是不同的。

例子:

1SELECT[DISTINCT]
2FROM
3WHERE
4GROUP BY
5HAVING
6UNION
7ORDER BY

上面的例子没有把所有的SQL语法结构都列出来,但是足够说明SQl的语法顺序和执行顺序完全不一样,上述语句的执行顺序为:

1FROM
2WHERE
3GROUP BY
4HAVING
5SELECT
6DISTINCT
7UNION
8ORDER BY

SQL语句的执行顺序值得注意的地方:

1.from是SQL语句执行的第一步,数据库执行SQL语句的第一步是将数据从硬盘加载到数据缓冲区,便于对这些数据进行操作。

2.select是在大部分语句执行后才执行的,严格说是在from和group by之后执行,这也是在where中不能使用在select中设定别名的字段作为判断条件的原因。

1 SELECT A.x + A.y AS z
2 FROM A
3 WHERE z = 10 -- z 在此处不可用,因为SELECT是最后执行的语句! 

如果想使用别名Z,有两个选择。要么重新写一遍Z代表的表达式:

1 SELECT A.x + A.y AS z
2 FROM A
3 WHERE (A.x + A.y) = 10

或者求助衍生表,通用数据表达式或者视图,避免别名重用。

3.无论在语法上还是执行顺序上,union总是排在order by之前。很多人认为每个 UNION 段都能使用 ORDER BY 排序,但是根据 SQL 语言标准和各个数据库 SQL 的执行差异来看,这并不是真的。尽管某些数据库允许 SQL 语句对子查询(subqueries)或者派生表(derived tables)进行排序,但是这并不说明这个排序在 UNION 操作过后仍保持排序后的顺序。

注意:并非所有的数据库对 SQL 语句使用相同的解析方式。如 MySQL、PostgreSQL和 SQLite 中就不会按照上面第二点中所说的方式执行。

 

用一段话总结一下:

SQL Select语句完整的执行顺序:
1、from子句组装来自不同数据源的数据;
2、where子句基于指定的条件对记录行进行筛选;
3、group by子句将数据划分为多个分组;
4、使用聚集函数进行计算;
5、使用having子句筛选分组;
6、计算所有的表达式;
7、使用order by对结果集进行排序。
8、select 集合输出。

 

posted @ 2016-12-15 10:27  436酱油哥  阅读(3841)  评论(0编辑  收藏  举报