首页 > 数据库 >SQL执行顺序和逻辑

SQL执行顺序和逻辑

时间:2024-07-30 22:50:17浏览次数:12  
标签:逻辑 顺序 虚表 记录 产生 虚拟 SQL 操作 执行

SQL执行顺序和逻辑

MySQL的执行顺序:

    (9) SELECT
    (6) SUM(聚合函数)
    (10) 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>
    (7) HAVING <having_condition>
    (8) WITH {CUBE | ROLLUP}
    (11) UNION
    (12) ORDER BY <order_by_condition>
    (13) LIMIT <limit_number>


每一个阶段:

  FORM: 对FROM的左边的表和右边的表计算笛卡尔积。产生虚表VT1
  ON: 对虚表VT1进行ON筛选,只有那些符合<join-condition>的行才会被记录在虚表VT2中。
  JOIN: 如果指定了OUTER JOIN(比如left join、 right join),那么保留表中未匹配的行就会作为外部行添加到虚拟表VT2中,产生虚拟表VT3, 如果from子句中包含两个以上的表的话,那么就会对上一个join连接产生的结果VT3和下一个表重复执行步骤1~3这三个步骤,一直到处理完所有的表为止。
  WHERE: 对虚拟表VT3进行WHERE条件过滤。只有符合<where-condition>的记录才会被插入到虚拟表VT4中。
  GROUP BY: 根据group by子句中的列,对VT4中的记录进行分组操作,产生VT5.
  CUBE | ROLLUP: 对表VT5进行cube或者rollup操作,产生表VT6.
  HAVING: 对虚拟表VT6应用having过滤,只有符合<having-condition>的记录才会被 插入到虚拟表VT7中。
  SELECT: 执行select操作,选择指定的列,插入到虚拟表VT8中。
  DISTINCT: 对VT8中的记录进行去重。产生虚拟表VT9.
  ORDER BY: 将虚拟表VT9中的记录按照<order_by_list>进行排序操作,产生虚拟表VT10.
  LIMIT:取出指定行的记录,产生虚拟表VT11, 并将结果返回。


Sql 执行过程:

1、连接池鉴权,判定当前用户是否有当前操作的权限
2、如若为查询操作则看缓存是否有数据,缓存命中则直接返回
3、传递给解析器进行sql词法分析
4、优化器依据词法分析结果,决定后续处理方式,生成执行计划
5、依据上面生成的执行计划,调用存储引擎 api
6、如若为删改数据或该表等操作,如若开启 binlog 则在事务最终提交前写入 binlog 日志
7、返回相关处理结果

 

附图:

 

标签:逻辑,顺序,虚表,记录,产生,虚拟,SQL,操作,执行
From: https://www.cnblogs.com/rcsy/p/18333503

相关文章

  • 基于SSM的车辆租赁管理系统(含源码+sql+视频导入教程+文档)
    ......
  • 基于SSM的汽车租赁管理系统(含源码+sql+视频导入教程)
    ......
  • 生成MySQL-oracle-SQL server数据字典(附Python代码)
    生成数据字典,早年写的,请注意新的版本变化。(1)MySQL元数据SQLUSEinformation_schema;#取出库和表。select  TABLE_SCHEMAAS'数据库名称',  TABLE_NAMEAS'表名',  TABLE_TYPEAS'表类型',  ROW_FORMATAS'行格式',  ENGINEAS'数据库引擎',  TABL......
  • mysql工具简介
    MySQL常用工具mysqladmin  创建删除数据库,授权等。mysqlbinlog 从二进制日志读取语句的工具,mysqlcheck  检查,修复,分析以及优化表的表维护程序mysqldump  将MySQL数据库转储到一个文件。mysqlimport 使用loaddatainfile将文本文件导入相关表的客户程序。mysq......
  • mysql测试库-emp-dept
    003-MySQL版本测试库-emp-dept初始化DROPTABLEIFEXISTS`bonus`;CREATETABLE`bonus`( `ename`varchar(10)DEFAULTNULL, `job`varchar(9)DEFAULTNULL, `sal`int(11)DEFAULTNULL, `comm`int(11)DEFAULTNULL)ENGINE=InnoDBDEFAULTCHARSET=utf8mb4;--......
  • 静态顺序表
    顺序表顺序表和链表都是线性表的一种,此处介绍顺序表数据的存储结构有分为逻辑存储结构和物理存储结构。顺序表和链表(之后的文章会详解)实际上都是线性表,是因为他们的逻辑存储关系都是线性的,只是因为在计算机内存中存储的方式(物理存储结构)不同。两种物理存储结构各有......
  • MySQL基础
    MySQL默认情况下在查询和操作数据库对象时,不区分大小写:对于表名、列名和数据库名,MySQL不会区分大小写。例如,"mytable"、"MyTable"和"MYTABLE"都被视为相同的表名。在SQL语句中,关键字和函数名不区分大小写。例如,"SELECT"、"select"和"Select"都是等效的。在默认情况下,MySQ......
  • SQL中的大小写操作函数
    在SQL中,直接处理字符串大小写转换的函数可能因不同的数据库系统(如MySQL、PostgreSQL、SQLServer等)而有所差异。不过,一些基本的、跨数据库的字符串大小写操作函数包括:转换为大写:UPPER(string):将字符串中的所有字符转换为大写。这是SQL中最常用的将字符串转换为大写的函......
  • SQL中有多少Statements
    SQL(StructuredQueryLanguage)是一种用于管理和操作关系型数据库的标准编程语言。SQL语句的种类繁多,它们被设计来执行不同的数据库操作,如数据查询、数据更新、数据定义(如表和索引的创建)等。由于SQL语言不断发展并且不同数据库系统(如MySQL、PostgreSQL、SQLServer、Oracle等)可......
  • Datawhale AI夏令营 逻辑推理
    #AI夏令营#Datawhale#夏令营#大模型#微调实践步骤:一、跑通baseline二、尝试个人idea三、尝试进阶baseline比赛链接:上海科学智能研究院一、baseline介绍baseline代码由官方提供,无需修改食用指南:Datawhalebaseline收获官方提供的baseline可以做到一键运行,只......