SQL执行步骤的具体分析

 更新时间:2017年10月10日 16:23:59   作者:牧师-Panda  
这篇文章主要介绍了SQL执行步骤的具体分析的相关资料,希望通过本文能帮助到大家,让大家理解掌握SQL是如何执行的,需要的朋友可以参考下

SQL执行步骤的具体分析

先来看执行语句的顺序

(8)select (9)distinct A (1)from Ta (3)join Tb 
(2)on XXX (4)where XXX (5)group by XXX (6)with 
{cube|roll up} (7)having XXX (10)order by XXX (11)limit XXX 

 接着我们看一下具体分析查询处理的各个阶段:

  1. FROM  对from子句中的左表和右表执行笛卡尔集,产生虚拟表VT1
  2. ON  对虚拟表VT1进行on筛选,只有那些符合join condition的行才被插入虚拟表VT2中
  3. JOIN  如果指定了outer join,那么保留表中未匹配的行作为外部行添加到虚拟表VT2中,产生虚拟表VT3。如果from子句包含两个以上的表,则对上一个连接生成的结果表中VT3和下一个表重复执行步骤1~步骤3,直到处理完所有的表为止。
  4. WHERE  对虚拟表VT3进行where过滤条件,只有符合条件的才被插入到虚拟表VT4中。
  5. GROUP BY  根据group by子句中的列,对VT4中的记录进行分组操作,产生VT5.
  6. CUBE|ROLL UP  对表VT5进行CUBE或者ROLLUP操作,产生表VT6.
  7. HAVING  对虚拟表VT6应用having过滤器,只有符合条件的记录才会被插入到虚拟表VT7中
  8. SELECT  第二次执行select操作,选择指定的列,插入到虚拟表VT8中。
  9. DISTINCT  去除重复数据,产生虚拟表VT9。
  10. ORDER BY  将虚拟表VT9中的记录按照指定的要求进行排序操作,产生虚拟表VT10
  11. LIMIT  取出指定行的记录,产生虚拟表VT11,并返回给查询用户

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • mysql共享锁与排他锁用法实例分析

    mysql共享锁与排他锁用法实例分析

    这篇文章主要介绍了mysql共享锁与排他锁用法,结合实例形式分析了mysql共享锁与排他锁相关概念、原理、用法及操作注意事项,需要的朋友可以参考下
    2019-09-09
  • mysql时间字段默认设置为当前时间实例代码

    mysql时间字段默认设置为当前时间实例代码

    很多人可能会把日期类型的字段的类型设置为date或者datetime,
    但是这两个类型是无法设置默认值为当前日期的,下面这篇文章主要给大家介绍了关于mysql时间字段默认设置为当前时间的相关资料,需要的朋友可以参考下
    2022-08-08
  • mysql排序ORDER BY不生效的问题解决

    mysql排序ORDER BY不生效的问题解决

    order by作为一个常用的功能,在项目中应该经常用到,本文主要介绍了mysql排序ORDER BY不生效的问题解决,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • MySQL中的批量修改、插入操作数据库

    MySQL中的批量修改、插入操作数据库

    在平常的项目中,我们会需要批量操作数据库的时候,例如:批量修改,批量插入,那我们不应该使用 for 循环去操作数据库,这样会导致我们反复与数据库发生连接和断开连接,影响性能和增加操作时间,所以可以使用SQL 批量修改的方式去操作数据库,感兴趣的朋友一起学习下吧
    2023-09-09
  • SQL实现LeetCode(178.分数排行)

    SQL实现LeetCode(178.分数排行)

    这篇文章主要介绍了SQL实现LeetCode(178.分数排行),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • Centos7安装 mysql5.6.29 shell脚本

    Centos7安装 mysql5.6.29 shell脚本

    这篇文章主要为大家详细介绍了Centos7安装mysql5.6.29的shell脚本,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • MySQL 8.0新特性 — 管理端口的使用简介

    MySQL 8.0新特性 — 管理端口的使用简介

    这篇文章主要介绍了MySQL 8.0新特性 — 管理端口的使用简介,帮助大家更好的理解和学习使用MySQL,感兴趣的朋友可以了解下
    2021-03-03
  • 在SpringBoot中实现WebSocket会话管理的方案

    在SpringBoot中实现WebSocket会话管理的方案

    在构建实时通信应用时,WebSocket 无疑是一个强大的工具,SpringBoot提供了对WebSocket的支持,本文旨在探讨如何在 Spring Boot 应用中实现 WebSocket 会话管理,我们将通过一个模拟的场景一步步展开讨论,需要的朋友可以参考下
    2023-11-11
  • mysql不同数据库不同数据表导入数据

    mysql不同数据库不同数据表导入数据

    这篇文章主要介绍了mysql不同数据库不同数据表导入数据的相关资料,需要的朋友可以参考下
    2015-07-07
  • MySQL索引的各种类型

    MySQL索引的各种类型

    这篇文章主要介绍了MySQL索引的各种类型,帮助大家更好的理解和学习MySQL索引,感兴趣的朋友可以了解下
    2020-09-09

最新评论