转载一篇不错的文章:http://ddlgyq.iteye.com/blog/1867867
sql语言中的查询的执行顺序,以前不是很了解,最近查阅了相关资料,在sql语言中,第一个被处理的字句总是from字句,最后执行的limit操作。现有以下的sql语句。
(8)SELECT (9)DISTINCT<select_list>
(1)FROM<left_table>
(3)<join_type>JOIN<right_table>
(2) ON<join_condition>
(5)GROUP BY<group_by_list>
(6)WITH{CUBE|ROLLUP}
(7)HAVING<having_condition>
(10)ORDER BY<order_by_list>
(11)LIMIT<limit_number>
以上的sql语句前的数字代表该sql语句的执行顺序,每一个操作都会产生一个虚拟表,这个虚拟表作为下个操作的输入,依次类推,最后生成的虚拟表作为结果输出。如果没有在查询中指定某一字句,则将跳过相应的步骤
1)FROM:对FROM子句中的左表<left_table>和右表<right_table>执行笛卡尔积,产生虚拟表VT1.
2)ON:对虚拟表VT1应用ON筛选,只有那些符合条件<join_condition>的行才会被插入虚拟表VT2中。
3)JOIN:如果是外连接,还要根据外连接的类型执行join操作,例如左外连接将左表中的行并且不在VT2中的行加入到VT2中,产生VT3.
4)WHERE:对虚拟表VT3应用where过滤条件,只有符合<where_condition>的记录才被插入虚拟表VT4中。
5)GROUP BY:根据GROUP BY字句中的列,对VT4中的记录进行分组操作,产生VT5.
6)CUBE|ROLLUP:对表VT5执行cube或者rollup操作,产生虚拟表VT6.
7)HAVING:对虚拟表VT6应用HAVING过滤器,只有符合<having_condition>的记录才会被插入虚拟表VT7中
8)SELECT:对VT7执行select操作,将指定的数据插入到虚拟表VT8中
9)DISTINCT:去除重复数据,产生虚拟表VT9.
10)ORDER BY:按照<order_by_list>对VT9进行排序操作,产生虚拟表VT10
11).LIMIT:选出指定的行,产生虚拟表VT11,返回给用户。
ps:在应用where过滤器的时候,有两种过滤不被允许。
(1).由于此时数据还没有分组,所以还不能在where中使用where_condition=MIN(col)这类对统计的过滤
(2).由于此时还没有进行select操作,所以where中不能使用在select中定义的列的别名。
相关推荐
Sql语句执行顺序Sql语句执行顺序Sql语句执行顺序Sql语句执行顺序Sql语句执行顺序Sql语句执行顺序Sql语句执行顺序
SQL查询语句执行顺序如下: (7) SELECT (8) DISTINCT <select_list> (1) FROM (3) <join> JOIN (2) ON (4) WHERE (5) GROUP BY (6) HAVING (9) ORDER BY (10) LIMIT 前期准备工作 1、新建一个测试...
关于SQL语句在进入oracle库缓存之后的执行顺序的简析~!
SQL语句的执行原理及顺序,好好学习吧!哈哈!
SQL Select2008语句完整的执行顺序
Sql查询语句的的执行顺序.xmind
T-SQL语句执行的顺序
SQL语句中SELECT语句的执行顺序; 详细的讲述了SQL的SELECT语句的各个子句一起使用时的执行优先级问题;
ansi sql中SELECT语句的执行顺序,很有用的哦
本文将详细介绍数据库总结--SQL语句执行顺序,需要了解更多的朋友可以参考下
本文将从MySQL总体架构—>查询执行流程—>语句执行顺序来探讨一下其中的知识。 一、MySQL架构总览: 架构最好看图,再配上必要的说明文字。 下图根据参考书籍中一图为原本,再在其上添加上了自己的理解。 从...
本文给大家介绍SQL语句执行顺序详解,涉及到sql语句执行顺序相关知识,对sql语句执行顺序感兴趣的朋友一起看看吧
SQL 语句的执行顺序跟其语句的语法顺序并不一致 一般而言 SQL 语句的语法顺序是: SELECT[DISTINCT] FROM WHERE GROUP BY HAVING UNION ORDER BY 其执行顺序为: FROM WHERE GROUP BY HAVING SELECT DISTINCT UNION...
数据库复杂查询执行顺序与编写顺序原理及sql案例:同时出现了where_group_by_having_order_by的时候_执行顺序和编写顺序
SQL 查询的执行顺序是怎样的? 好像这个问题应该很好回答,毕竟自己已经写了无数个 SQL 查询了,有一些还很复杂的。还装不了这个逼了?! 但事实是,我仍然很难确切地说出它的顺序是怎样的。 言归正传,SELECT语句...
目前还在查看,但是在查阅资料时发现了一些有益的知识,给大家分享一下,就是关于sql以及MySQL语句执行顺序: sql和mysql执行顺序,发现内部机制是一样的。最大区别是在别名的引用上。 一、sql执行顺序 (1)from ...