码迷,mamicode.com
首页 > 数据库 > 详细

SQL语句的执行顺序

时间:2016-12-15 11:57:16      阅读:387      评论:0      收藏:0      [点我收藏+]

标签:使用   select   编写   数据源   个数   order   理解   输出   语法   

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

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

例子:

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

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

1 ?FROM
2 ?WHERE
3 ?GROUP BY
4 ?HAVING
5 ?SELECT
6 ?DISTINCT
7 ?UNION
8 ?ORDER 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 集合输出。

 

SQL语句的执行顺序

标签:使用   select   编写   数据源   个数   order   理解   输出   语法   

原文地址:http://www.cnblogs.com/spring-hailong/p/6182227.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!