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 joinRight Outer joinFull 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各关键字的逻辑执行顺序相关推荐

  1. select语句的逻辑执行顺序,你知道吗?

    回顾一下上一篇博客说到的问题: mysql -uroot -ptest 我们不能赤裸裸的将账户和密码就这样写在你的脚本里,这并不是一个好做法.所有能够访问你脚本的人都会知道数据库的用户账户和密码.要解 ...

  2. HiveQL逻辑执行顺序

    FROM->WHERE->GROUP BY->HAVING->SELECT->ORDER BY Hive总是按照从左到右的顺序执行的,如a.b.c三个表关联 select ...

  3. MySQL join 与where的执行顺序

    MySQL join 与where的执行顺序 -- 写法ok 先过滤后join select * from(select * from u1 where u1.id=3)t join u2 on t. ...

  4. SQL查询语句逻辑执行顺序

    1.查询语句的逻辑执行顺序 执行1:from 执行2:on 执行3:join 执行4:where 执行5:group by 执行6:having 执行7:select 执行8:distinct 执行9 ...

  5. SELECT语句逻辑执行顺序,你知道吗?

    引言 这不是一个什么多深的技术问题,多么牛叉的编程能力.这跟一个人的开发能力也没有非常必然的直接关系,但是知道这些会对你的SQL编写,排忧及优化上会有很大的帮助.它不是一个复杂的知识点,但是一个非常基 ...

  6. SqlServer中Sql语句的逻辑执行顺序

    准备数据 Sql脚本如下,两张表,一张客户表Customers只包含customerid和city字段,一张订单表Orders包含orderid和customerid(关联Customers的cust ...

  7. Mysql中查询语句的执行顺序

    一.sql查询语句执行顺序 (8)Select (9)distinct 字段名1,字段名2, (6)[fun(字段名)] (1)from 表1 (3)<join类型>join 表2 (2) ...

  8. mysql中的运算符的执行顺序_【MySQL】执行顺序

    我去找你❤️ 我给你买❤️ 我带你去❤️ 我很爱你❤️ 我们回家❤️ 我们结婚❤️ 你听过最孤独的话是什么? 同学,code就剩你没提交了 今天讨论的话题是 MySQL执行顺序 ??? 先养眼,再看题 ...

  9. MySQL 基础 ———— SQL语句的执行顺序与 LIMIT 子句

    引言 到目前为止,已经总结了常见的SQL子句,包括 SELECT .FROM.JOIN ... ON.WHERE.GROUP BY.HAVING.ORDER BY. 虽然SQL的书写顺序是固定的,但在 ...

最新文章

  1. STM32 逐次逼近寄存器型(SAR)模拟数字转换器(ADC)
  2. ScheduledThreadPoolExecutor详解
  3. SQL和PL/SQL的性能优化之四---联结与子查询
  4. 160 - 18 Brad Soblesky.1
  5. 夺命雷公狗jquery---22-bind为jquery对象绑定多个相关事件
  6. Hihocoder #1631 : Cats and Fish 模拟
  7. mac mysql prefpane_【MySQL数据库开发之一】Mac下配置安装数据库-MySQL
  8. vs不一致的行尾对话框怎么调出_细分调漆步骤,新手师傅怎么轻松调漆
  9. 树莓派c语言实现modbus主机_特斯拉+树莓派实现车牌识别检测系统
  10. SpringBoot源码分析解答问题
  11. PHPThumb处理图片
  12. 几大经典算法c语言cnds,浮点数据有损压缩算法 附完整C代码
  13. 如何做伪原创视频 视频md5修改器吾爱
  14. 解决网站开通https后地址栏图标小锁变成灰色警告图标教程
  15. webstorm修改主题色和配色
  16. 2015游戏蛮牛——蛮牛杯第四届开发者大赛 创见VR未来开启报名
  17. CORTEX-A系列处理器
  18. 《论文阅读》Generating Responses with a Specific Emotion in Dialog
  19. phalcon mysql_Phalcon 数据库操作总结
  20. 湖北移动CM201-1-CH _S905L3B-UWE5621DS_线刷固件包

热门文章

  1. 第一部分:简单句——第一章:简单句的核心——二、简单句的核心变化(谓语动词的时态)
  2. 内存地址重映射的选项_内存控制设置请教
  3. 2020.11.28-29全国高校大数据专业教学研讨与教师培训会议
  4. *******系统监控技术选型
  5. JAVA文件传输免费LW+源代码
  6. fio 2种画图方法 fio_generate_plots 和 gfio
  7. 就不告诉你 就不告诉你~
  8. 华为员工的命 只值一台交换机的钱 【 华为员工 胡新宇 过劳死 最新报道 】
  9. python中list常用操作(不包括切片)
  10. MySQL安装的第三步出现红叉解决方法