MySQL语法顺序及执行顺序
一、书写顺序
select[distinct]
from
join
on
where
group by
having
union
order by
limit
二、执行顺序
from
on
join
where
group by (可以使用select中的别名,后面的语句中都可以使用)
having
select
distinct
union
order by
limit
以上每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入。这些虚拟表对调用者(客户端应用程序或者外部查询)不可用。只有最后一步生成的表才会会给调用者。如果没有在查询中指定某一个子句,将跳过相应的步骤。
1、首先对from子句中的前两个表执行一个笛卡尔乘积(交叉联接),此时生成虚拟表 VT1(选择相对小的表做基础表);
2、应用on筛选器,on 中的逻辑表达式将应用到 VT1 中的各个行,筛选出满足on逻辑表达式的行,生成虚拟表 VT2;
3、如果是外连接,就将添加外部行;如果是左连接,就把左表在第二步中过滤的添加进来; 如果是右连接,就将右表在第二步中过滤掉的行添加进来,这样生成虚拟表 VT3 ;
如果 from 子句中的表数目多余两个表,那么就将VT3和第三个表连接从而计算笛卡尔乘积,生成虚拟表,该过程就是一个重复1-3的步骤,最终得到一个新的虚拟表 VT3;
4、对 VT3 应用 WHERE 筛选器,只有使为 true 的行才插入 VT4。
5、group by 子句将中的唯一的值组合成为一组,得到虚拟表VT5。如果应用了group by,那么后面的所有步骤都只能得到的VT5的列或者是聚合函数(count、sum、avg等)。原因在于最终的结果集中只为每个组包含一行;
6、应用cube或者rollup选项,为VT5生成超组,生成VT6.
7、应用having筛选器,生成VT7。having筛选器是第一个也是为唯一一个应用到已分组数据的筛选器
8、处理select子句。将VT7中的在select中出现的列筛选出来。生成VT8.
9、应用distinct子句,VT8中移除相同的行,生成VT9。事实上如果应用了group by子句那么distinct是多余的;
10、应用order by子句。按照order_by_condition排序VT9,此时返回的一个游标,而不是虚拟表。sql是基于集合的理论的,集合不会预先对他的行排序,它只是成员的逻辑集合,成员的顺序是无关紧要的。对表进行排序的查询可以返回一个对象,这个对象包含特定的物理顺序的逻辑组织。这个对象就叫游标。正因为返回值是游标,那么使用order by 子句查询不能应用于表表达式;
11、应用limit,从游标开始处选择指定数量或比例的行,生成表 TT11,并返回给用户。
MySQL语法顺序及执行顺序的更多相关文章
- SQL 中的语法顺序与执行顺序(转)
很多程序员都很抵触SQL.其实SQL是一整为数不多的声明性语言,只是它的运行方式完全不同于我们所熟知的命令行语言.面向对象的程序语言.甚至是函数语言. 今天大家共同学习下SQL的语法顺序与执行顺序.( ...
- Oracle-SQL语句的语法顺序和执行顺序
SQL语句的语法顺序和执行顺序了,我们常见的SQL语法顺序如下: SELECT DISTINCT <Top Num> <select list>FROM [left_table ...
- mysql语句的书写顺序和执行顺序
mysql语句的书写顺序和执行顺序有很大差异. 书写顺序,mysql的一般书写顺写为: select <要返回的数据列> from <表名> <join, left jo ...
- SQL 中的语法顺序与执行顺序
FROM : HOME SQL 是一种声明式语言 SQL 语言是为计算机声明了一个你想从原始数据中获得什么样的结果的一个范例,而不是告诉计算机如何能够得到结果. SQL 语言声明的是结果集的属性,计算 ...
- mysql 中sql的执行顺序
文章转自 https://www.cnblogs.com/annsshadow/p/5037667.html https://www.cnblogs.com/yyjie/p/7788428.html ...
- MySQL——sql语句的执行顺序
#核心知识点: 书写顺序:where——>group by——>having——>order by——>limit 许多时候在书写一些复杂的sql语句的时候,尤其是在渐进式推导 ...
- MySQL笔记-语句的执行顺序
在一次查询线上问题时发现有以下两条同样的SQL,执行后数据的顺序不一样: SELECT * FROM nns_assists_item AS asset WHERE asset.nns_assist_ ...
- mysql索引及sql执行顺序
1, 红黑树 同一层级的黑树到根结点经历的黑树数目一样 最坏情况的时间复杂度 lg n 是二叉树b树 结点可以有多个孩子 b+树 父节点不存储数据聚集索引)的叶子节点会存储数据行,也就是说数据和索引是 ...
- mysql查询语句的执行顺序(重点)
一 SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOI ...
随机推荐
- Java如何获取当前类路径
1.如何获得当前文件路径 常用: (1).Test.class.getResource("") 得到的是当前类FileTest.class文件的URI目录.不包括自己! (2).T ...
- SAS 获取系统选项设置的过程步 PROC OPTIONS OPTION=()
PROC OPTIONS OPTION=(VALIDVARNAME LS);RUN;
- 深度学习剖根问底: Adam优化算法的由来
在调整模型更新权重和偏差参数的方式时,你是否考虑过哪种优化算法能使模型产生更好且更快的效果?应该用梯度下降,随机梯度下降,还是Adam方法? 这篇文章介绍了不同优化算法之间的主要区别,以及如何选择最佳 ...
- PHP面试-复习知识点整理
false的七种情况 整型0 浮点0.0 布尔false 空字符串'',"" 字符串'0' 空数组[] NULL 超全局数组 $GLOBALS,包含下面8个超全局数组的值 $_GE ...
- NIO网络访问模式实践
1.创建NioNest12类 一个线程监听5个端口的事件 public class NioTest12 { public static void main(String[] args) throws ...
- 破解NFC卡
目录 概念 各种卡 IC卡存储器结构 破解工具 破解NFC卡 概念 各种卡 ID卡 工作在低频(125Khz) ID卡 特点 EM4XX系列,多为EM4100/EM4102卡 常用的固化ID卡,出厂固 ...
- flutter 高德地图选择位置信息返回
添加依赖:(注意,作者一直更新维护,请以最新的版本添加) amap_map_fluttify: ^ amap_search_fluttify: ^ 代码实现: import 'package:amap ...
- Holmos框架
一.Holmos介绍--简介 Holmos-webtest是一个居于selenium2.0二次封装的开源框架,采用Page-Object模式去组织页面结构,同时支持多维度的页面元素定位方式,同时还继承 ...
- 《Effective Java》第1章 创建和销毁对象
第1条 用静态工厂方法代替构造器 这个静态工厂,与设计模式中的静态工厂不同,这里的静态工厂方法,替换为“静态方法”比较好理解,主要就是建议编写静态方法来创建对象. 使用静态方法的好处: 1.静态方法有 ...
- Android android:allowBackup waiting for backup
在Google settings 中,有个backup 选项,在里面选择开启 如果开启vpn,还是在setting里面还是waiting for backup, 就通过手机链接电脑,安装android ...