美文网首页MySQL
22-SELECT 的执行过程

22-SELECT 的执行过程

作者: 紫荆秋雪_文 | 来源:发表于2022-08-19 16:34 被阅读0次

一、SELECT 执行语句格式

  • 方式一
SELECT ...,....,... 
FROM ...,...,.... 
WHERE 多表的连接条件 
AND 不包含组函数的过滤条件 
GROUP BY ...,... 
HAVING 包含组函数的过滤条件 
ORDER BY ... ASC/DESC 
LIMIT ...,...
  • 方式二
SELECT ...,....,... 
FROM ... 
JOIN ... ON 多表的连接条件 
JOIN ... ON ... 
WHERE 不包含组函数的过滤条件 
AND/OR 不包含组函数的过滤条件 
GROUP BY ...,... 
HAVING 包含组函数的过滤条件 
ORDER BY ... ASC/DESC 
LIMIT ...,...
  • 1、FROM:从哪些表中筛选
  • 2、ON:关联多表查询时,去除笛卡尔积
  • 3、WHERE:筛选条件
  • 4、GROUP BY:分组条件
  • 5、HAVING:在统计结果中再次筛选
  • 6、ORDER BY:排序
  • 7、LIMIT:分页

二、SELECT 执行顺序

1、关键字的顺序不能颠倒

SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ... LIMIT...

2、SELECT 执行顺序

FROM -> WHERE -> GROUP BY -> HAVING -> SELECT 的字段 -> DISTINCT -> ORDER BY -> LIMIT
image.png
image.png

在 SELECT 语句执行这些步骤的时候,每个步骤都会产生一个虚拟表,然后将这个虚拟表传入下一个步骤中作为传入。需要注意的是,这些步骤隐含在 SQL 的执行过程中,对于我们来说是不可见的。

3、SQL 的执行原理

  • 1、SELECT 是先执行 FROM 这一步的。在这个阶段,如果是多张表联查,还会经历下面的几个步骤:
    • 1.1、首先通过 CROSS JOIN 求笛卡尔积,相当于得到虚拟表vt1-1
    • 1.2、通过 ON 进行筛选,在虚拟表 vt1-1 的基础上进行筛选,得到虚拟表 vt1-2
    • 1.3、添加外部行。如果我们使用的是左连接、右连接或者全连接,就会涉及到外部行,也就是在虚拟表 vt1-2的基础上增加外部行,得到虚拟表 vt1-3
  • 2、如果我们操作的是 2 张表以上的表,还会重复上面的步骤,直到所有表都被处理完为止。这个过程得到是我们的原始数据。也就是最终的虚拟表 vt1
  • 3、在 vt1 基础上再进行 WHERE 阶段,在这个阶段中,会根据 vt1 表的结果进行筛选过滤,得到虚拟表 vt2
  • 4、然后进入 GROUP 和 HAVING 阶段 。在这个阶段中,实际上是在虚拟表 vt2 的基础上进行分组和分组过滤,得到中间的虚拟表 vt3vt4
  • 5、当我们完成了条件筛选部分之后,就可以筛选表中提取的字段,也就是进入到 SELECT 和 DISTINCT 阶段
  • 6、首先在 SELECT 阶段会提取想要的字段,然后在 DISTINCT 阶段 过滤掉重复的行,分别得到中间的虚拟表 vt5-1vt5-2
  • 7、当我们提取了想要的字段数据之后,就可以按照指定的字段进行排序,也就是 ORDER BY 阶段,得到虚拟表 vt6
  • 8、最后在 vt6 的基础上,取出指定行的记录,也就是 LIMIT 阶段,得到最终的结果,对应的是虚拟表 vt7

相关文章

  • 22-SELECT 的执行过程

    一、SELECT 执行语句格式 方式一 方式二 1、FROM:从哪些表中筛选 2、ON:关联多表查询时,去除笛卡尔...

  • 执行过程

    想要极端的成就,必付出极端的努力,成为极端的人格。 人与人核心的差别是觉悟。 为了改变一些习惯,我对生活方式下手了...

  • HelloWorld的执行过程

    在看完《深入了解Java虚拟机》对象创建和类加载之后,想要连贯的对一段代码的执行过程进行一个追踪,以下是目前的个人...

  • 方法的执行过程

    先看如下代码: 上图是方法执行过程图 因为m4方法没有被调用,所以不会进行压栈操作。

  • js的执行过程

    JavaScript是解释型语言,也就是说,我们的js代码会通过一个解释器来进行解释执行,这个解释器我们称为js引...

  • mapreduce的执行过程

    wordcount 关于切片划分maptask任务,由客户端(提交job)完成,写入文件交给mr appmaste...

  • Mybatis的执行过程

    1、 mybatis配置SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了myba...

  • js的执行过程

    在网络的直言片语中禹禹前行,在书本的记录中逐步加深,然而只有在实践中才能提出疑问,才能映像深刻。 我所理解的js执...

  • new的执行过程

  • mysql的执行过程

    有时候会问说一下mysql的执行过程? mysql 六大组价 连接器、缓存、分析器、优化器、执行器、存储引擎 1、...

网友评论

    本文标题:22-SELECT 的执行过程

    本文链接:https://www.haomeiwen.com/subject/eflugrtx.html