Mysql各关键字的逻辑执行顺序
Mysql各关键字的逻辑执行顺序
下面的执行顺序只是一种逻辑顺序,由于Mysql优化器的作用,实际情况可能略有不同。使用explain语句可以分析sql语句的执行顺序,但也不保证准确性。
(8) SELECT (9) DISTINCT<select_list>
(1) FROM <left_table>
(3) <join_type> JOIN <right_table>
(2) ON <join_condition>
(4) WHERE <where_condition>
(5) GROUP BY <group_by_list>
(6) WITH {CUBE|ROLLUP}
(7) HAVING <having_condition>
(10) ORDER BY <order_by_list>
(11) LIMIT <offset,limit_number>
1、from 执行笛卡尔乘积
对from子句中的左表<left_table>和右表<right_table>执行笛卡尔积,得到虚拟表VT1。
2、on 应用On过滤器
对前面生成的虚拟表VT1进行ON筛选,符合条件的会被记录到虚拟表VT2中。
3、join 添加外部行
这一步只有在连接类型为Outer join时才发生,如Left Outer join、Right Outer join、Full Outer join等,left outer join的保留表时左表,right outer join的保留表是右表,full outer join左右两个表都是保留表,添加外部行就是在VT2表的基础上添加添加保留表中被过滤条件过滤掉的数据,非保留表中的的数据被赋予null值,最后生成虚拟表VT3。
4、where 应用where过滤器
对步骤3产生的虚拟表VT3进行过滤,只有符合条件<where_condition>的记录才会插入新的虚拟表VT4。
5、group by 分组
根据group by子句中的列,对步骤4的记录进行分组操作得到虚拟表VT5。
6、with 应用ROLLUP或CUBE
如果指定了ROLLUP选项,将创建一个额外的记录添加到虚拟表VT5的最后,并生成虚拟表VT6。mysql不支持CUBE。
7、应用HAVING过滤器
对上一步产生的虚拟表应用Having过滤器
8、处理Select列表
将Select中指定的列从上一步产生的虚拟表中选出。
9、应用Distinct子句
如果在查询中指定了distinct子句,则会创建一张内存临时表,并对distinct操作的列增加了唯一索引,以此来去除重复数据。
10、应用Order by子句
根据order by指定的列对上一步输出的虚拟表进行排列,返回新的虚拟表。
11、Limit子句
从上一步的虚拟表中选出指定位置开始的指定行数据。
参考自Mysql技术内幕:SQL编程
Mysql各关键字的逻辑执行顺序相关推荐
- select语句的逻辑执行顺序,你知道吗?
回顾一下上一篇博客说到的问题: mysql -uroot -ptest 我们不能赤裸裸的将账户和密码就这样写在你的脚本里,这并不是一个好做法.所有能够访问你脚本的人都会知道数据库的用户账户和密码.要解 ...
- HiveQL逻辑执行顺序
FROM->WHERE->GROUP BY->HAVING->SELECT->ORDER BY Hive总是按照从左到右的顺序执行的,如a.b.c三个表关联 select ...
- MySQL join 与where的执行顺序
MySQL join 与where的执行顺序 -- 写法ok 先过滤后join select * from(select * from u1 where u1.id=3)t join u2 on t. ...
- SQL查询语句逻辑执行顺序
1.查询语句的逻辑执行顺序 执行1:from 执行2:on 执行3:join 执行4:where 执行5:group by 执行6:having 执行7:select 执行8:distinct 执行9 ...
- SELECT语句逻辑执行顺序,你知道吗?
引言 这不是一个什么多深的技术问题,多么牛叉的编程能力.这跟一个人的开发能力也没有非常必然的直接关系,但是知道这些会对你的SQL编写,排忧及优化上会有很大的帮助.它不是一个复杂的知识点,但是一个非常基 ...
- SqlServer中Sql语句的逻辑执行顺序
准备数据 Sql脚本如下,两张表,一张客户表Customers只包含customerid和city字段,一张订单表Orders包含orderid和customerid(关联Customers的cust ...
- Mysql中查询语句的执行顺序
一.sql查询语句执行顺序 (8)Select (9)distinct 字段名1,字段名2, (6)[fun(字段名)] (1)from 表1 (3)<join类型>join 表2 (2) ...
- mysql中的运算符的执行顺序_【MySQL】执行顺序
我去找你❤️ 我给你买❤️ 我带你去❤️ 我很爱你❤️ 我们回家❤️ 我们结婚❤️ 你听过最孤独的话是什么? 同学,code就剩你没提交了 今天讨论的话题是 MySQL执行顺序 ??? 先养眼,再看题 ...
- MySQL 基础 ———— SQL语句的执行顺序与 LIMIT 子句
引言 到目前为止,已经总结了常见的SQL子句,包括 SELECT .FROM.JOIN ... ON.WHERE.GROUP BY.HAVING.ORDER BY. 虽然SQL的书写顺序是固定的,但在 ...
最新文章
- STM32 逐次逼近寄存器型(SAR)模拟数字转换器(ADC)
- ScheduledThreadPoolExecutor详解
- SQL和PL/SQL的性能优化之四---联结与子查询
- 160 - 18 Brad Soblesky.1
- 夺命雷公狗jquery---22-bind为jquery对象绑定多个相关事件
- Hihocoder #1631 : Cats and Fish 模拟
- mac mysql prefpane_【MySQL数据库开发之一】Mac下配置安装数据库-MySQL
- vs不一致的行尾对话框怎么调出_细分调漆步骤,新手师傅怎么轻松调漆
- 树莓派c语言实现modbus主机_特斯拉+树莓派实现车牌识别检测系统
- SpringBoot源码分析解答问题
- PHPThumb处理图片
- 几大经典算法c语言cnds,浮点数据有损压缩算法 附完整C代码
- 如何做伪原创视频 视频md5修改器吾爱
- 解决网站开通https后地址栏图标小锁变成灰色警告图标教程
- webstorm修改主题色和配色
- 2015游戏蛮牛——蛮牛杯第四届开发者大赛 创见VR未来开启报名
- CORTEX-A系列处理器
- 《论文阅读》Generating Responses with a Specific Emotion in Dialog
- phalcon mysql_Phalcon 数据库操作总结
- 湖北移动CM201-1-CH _S905L3B-UWE5621DS_线刷固件包
热门文章
- 第一部分:简单句——第一章:简单句的核心——二、简单句的核心变化(谓语动词的时态)
- 内存地址重映射的选项_内存控制设置请教
- 2020.11.28-29全国高校大数据专业教学研讨与教师培训会议
- *******系统监控技术选型
- JAVA文件传输免费LW+源代码
- fio 2种画图方法 fio_generate_plots 和 gfio
- 就不告诉你 就不告诉你~
- 华为员工的命 只值一台交换机的钱 【 华为员工 胡新宇 过劳死 最新报道 】
- python中list常用操作(不包括切片)
- MySQL安装的第三步出现红叉解决方法