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语句的第一步是将数据从硬盘加载到数据缓冲区,便于对这些数据进行操做。spa

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

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

若是想使用别名Z,有两个选择。要么从新写一遍Z表明的表达式:blog

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 操做事后仍保持排序后的顺序。get

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

 

用一段话总结一下:

SQL Select语句完整的执行顺序:
一、from子句组装来自不一样数据源的数据;
二、where子句基于指定的条件对记录行进行筛选;
三、group by子句将数据划分为多个分组;
四、使用汇集函数进行计算;五、使用having子句筛选分组;六、计算全部的表达式;七、使用order by对结果集进行排序。八、select 集合输出。

相关文章
相关标签/搜索