SQL语句的执行顺序
Posted 436酱油哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL语句的执行顺序相关的知识,希望对你有一定的参考价值。
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语句的执行顺序的主要内容,如果未能解决你的问题,请参考以下文章