MySQL数据库 - 语句执行顺序

MySQL Select语句的执行顺序及数据库查询过程 通过了解SELECT语句的执行顺序,我们可以更好地理解数据库查询的过程,并且在需要优化查询性能时,可以针对不同的执行步骤进行相应的优化操作。执行计划生成:查询优化器确定了最优的执行计划后,会生成执行计划。HAVING子句:如果SELECT语句包含HAVING子句,MySQL会根据HAVING子句中的条件对分组后的数据进行筛选。LIMIT子句:最后,MySQL会根据LIMIT子句中指定的限制条件,返回查询结果的指定行数。FROM子句:首先,MySQL会解析SELECT语句中的FROM子句,并确定要查询的表。 阅读详情

手写SQL语句的顺序

select <select_list>

from <table_name>

<join_type> join <join_table> on <join_condition>

where <where_condition>

group by <group_by_list>

having <having_condition>

order by <order_by_condition>

limit <limt_number>


select <查询结果列表>

from <表名>

<表连接形式> join <表连接的表名> on <表连接条件>

where <查询条件>

group by <分组属性列表>

having <having查询条件>

order by <排序属性列表>

limit <限制数字>

各部分语句理解

  1. FROM

当执行查询语句的时候,首先需要知道的是它需要哪些表,正如我们去一个地方需要知道它的具体位置一样。如果需要多个表的话在这一部分也需要按照一定的顺序进行表连接操作

  1. WHERE

当确定需要读取哪一张表(或者多张表)的数据之后,需要进行where的条件限制,尽量减少读取的数据数量

  1. GROUP BY

在完成where操作的过滤之后,如果语句中有group by的话则会对过滤后的数据进行聚合操作,聚合操作是多对一的转换,因此在聚合操作过后,除了用于group by的字段之外,其它字段的原始数据将会丢失,只能得到它们相应的聚合结果(比如:sum(), avg())

  1. HAVING

主要对group by之后的分组结果进行过滤,可以根据参与group by的字段进行过滤,也可以根据其它字段的聚合值进行过滤,因此这里是可以拿聚合函数做判断的

HAVING并不是一定要和group by成对出现的,它也可以单独存在,在没有group by的时候,此时默认只有一个组,但是需要注意的是这时having里面参与过滤的字段需要在select里面存在,不然having会不知道这是分组里面的内容而导致报错

  1. SELECT

选取结果集中相对应的字段,在select中为字段设置的别名在此阶段及之后的操作中生效

  1. DISTINCT

去重操作,放在select之后有个原因是去重操作是要根据select里面所选字段来进行的

  1. ORDER BY

对得到的结果按照特定字段顺序进行排列,这里可以使用别名

  1. LIMIT

设置显示结果集中的几条数据

MySQL中语句的执行顺序

SQL语句执行顺序

from

on <on_condition>

<join_type> join <join_table>

where <where_condition>

group by <group_by_list>

<sum()、avg()等聚合函数>

having <having_condition>

select <select_list>

distinct

order by <order_by_condition>

limit <limit_number>

MySQL的语句一共分为11步,如下图所标注的那样,最先执行的总是FROM操作,最后执行的是LIMIT操作。其中每一个操作都会产生一张虚拟的表,这个虚拟的表作为一个处理的输入,只是这些虚拟的表对用户来说是透明的,但是只有最后一个虚拟的表才会被作为结果返回。如果没有在语句中指定某一个子句,那么将会跳过相应的步骤。

执行阶段分析

FORM: 对FROM的左边的表和右边的表计算笛卡尔积。产生虚拟表VT1

ON: 对虚拟表VT1进行ON筛选,只有那些符合的行才会被记录在虚拟表VT2中

JOIN:如果指定了OUTER JOIN(比如left join、 right join),那么保留表中未匹配的行就会作为外部行添加到虚拟表VT2中,产生虚拟表VT3, rug from子句中包含两个以上的表的话,那么就会对上一个join连接产生的结果VT3和下一个表重复执行步骤1~3这三个步骤,一直到处理完所有的表为止

WHERE:对虚拟表VT3进行WHERE条件过滤。只有符合的记录才会被插入到虚拟表VT4中

GROUP BY: 根据group by子句中的列,对VT4中的记录进行分组操作,产生VT5

CUBE | ROLLUP: 对表VT5进行cube或者rollup操作,产生表VT6

HAVING:对虚拟表VT6应用having过滤,只有符合的记录才会被 插入到虚拟表VT7中

SELECT:执行select操作,选择指定的列,插入到虚拟表VT8中

DISTINCT:对VT8中的记录进行去重。产生虚拟表VT9

ORDER BY: 将虚拟表VT9中的记录按照<order_by_list>进行排序操作,产生虚拟表VT10

LIMIT:取出指定行的记录,产生虚拟表VT11, 并将结果返回

其他

on和where的区别

简单来说,当有关联表时,on主要是针对关联表进行筛选,主表保留,当没有关联表时,二者作用相同。

例如在左外连时,首先执行on,筛选掉外连表中不符合on表达式的数据,而where的筛选是对主表的筛选。

where和having的区别

where是在查询前已知条件的情况下,对结果进行查询

having是对已经查询完成的结果再次根据条件进行筛选

因此,where中的属性必须是已存在表中的属性等,having中的属性或字段必须是在结果中存在。

stm32最小系统_完成一个最小FOC矢量控制系统所需的基本模块和功能配置 当我们读懂 FOC 矢量控制的基本原理之后,便迫不及待的想动手尝试,去实现一个矢量控制系统,让电机先转起来,有一个直观的感受。因此,我们需要设计实现一个矢量控制的最小系统,具备矢量控制的基本功能,满足电机矢量运行的基本条件。首先,看一下矢量控制的基本架构:矢量控制架构如上图所描述,矢量控制系统包括实时电流的采集、clarke 变换、park 变换、SVPWM 、实时角度的反馈和计算以及电流环和速... 阅读详情

相关推荐

扫码器USB键盘报告描述符数据格式解析

Byte0用于判断Shift是否按下,当按下时Byte0的Bit1会置1,即0x02,若未按下,Bit为0,即0x00。0x00 0x00 0x00 0x00 0x00 0x00 0x00--->>未按下Shift。0x00 0x00 0x00 0x00 0x00 0x00 0x00--->>按下Shift。0x00 0x04 0x00 0x00 0x00 0x00 0x00--->>输出A。0x00 0x04 0x00 0x00 0x00 0x00 0x00--->>输出a。

m0_65548585的博客 1142

sql和MySQL的语句执行顺序

sql和mysql执行顺序,发现内部机制是一样的。最大区别是在别名的引用上。 一、sql执行顺序 (1)from (3) join (2) on (4) where (5)group by(开始使用select中的别名,后面的语句中都可以使用) (6) avg,sum… (7)having (8) select (9) distinct (10) order by 从这个顺序中我们不难发现,所有的...

AIfurture的博客 1542

Token算力工厂建设方案:从GPU集群到计量计费的全链路设计

在AI应用从“租核”走向“买Token”的范式转换中,算力交付的核心指标已不再是vCPU或GPU实例,而是单位时间内的Token产出量与单Token成本。这一变化推动基础设施从资源租赁向计件生产演进,要求GPU集群、推理引擎、调度系统、计量计费等模块像工厂产线一样协同运转。本文从硬件异构混部、存储网络设计、推理引擎调优、Token网关与配额管理、稳定性治理等维度,系统拆解如何构建一座可量化、可计费、可扩展的Token算力工厂,并给出分三期落地的推进节奏,帮助架构师与技术管理者在AI基础设施建设中实现成本可控

weixin_29095587的博客 264

mysql语句执行顺序

需要注意的是,并非所有的SQL查询都会按照以上顺序执行,这取决于具体的查询语句,例如使用子查询时,子查询会优先执行,然后再执行主查询。

qq_41045651的博客 1902

国标GB28181视频平台EasyGBS国标平台设备播放断流现象的问题解决方案

于是排查代码发现,当设备网络较差时,设备会断流,超过指定的时间30s(EasyGBS平台默认值),就会主动清除流媒体服务,但是redis中的流数据还在,而当设备在录像时,自动保活会从redis中取保活流数据,所以就会出现设备状态显示正在播放,但是流已经消失的情况。有用户反馈,在安防视频监控EasyGBS运行时,接入的设备刚开始可以正常播放,开启云端录像后,也没有停止和重播的操作,但是出现了视频流断流的现象。在设备进行播放保活时,对流信息进行判断,添加一个最后的处理流时间,如果超过指定时间就自动重新拉流。

EasyNTS的博客 435

【日常小结】项目Modbus RTU 协议

Modbus RTU(远程终端) 协议 一、前言 最近因为码跺宽度测量项目推广升级,更换了摄像头(换成了基恩士摄像头)和光栅(换成了施莱格05LCM系列光栅),导致原来的程序用不了了,然而这个软件升级的任务落到了我身上,作为机械非科班出身的我要学习TCP和Modbus RTU通信协议,也算是自我突破了。本文只对Modbus/RTU/HEX 进行简单的小结。 二、Modbus Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气Schneider Electric)于1979年为使用可编程逻

weixin_39681471的博客 831

MySql的执行顺序

Mysql的执行顺序

weixin_55731897的博客 1万+

AB相增量式编码器以及STM32定时器编码器模式测速/测距离(HAL库)

编码器(Encoder)是一种用于测量旋转运动或位置的设备。编码器通常与定时器模块一起使用,以便在微控制器中获取和计算旋转的脉冲数量,从而确定物体的运动方向和距离。编码器在许多应用中都很有用,例如机器人运动控制、电机位置反馈和位置传感。STM32微控制器提供了多种类型的编码器支持,其中一种常见的编码器类型是增量编码器。增量编码器基于两个脉冲信号通道,通常称为A相和B相。当旋转发生时,这两个信号通道的相位关系会发生变化,从而可以计算出旋转方向和旋转的步数。

嵌入式软件工程师的博客 1万+

Mysql中查询语句的执行顺序

MySQL语句执行顺序

mysnsds的博客 1万+

Yandex复杂还原验证码识别

本文分析了Yandex滑动验证码的识别方法,指出其通过JS判断正确滑动位置而非用户交互还原图像。核心思路是通过像素差异分析,将验证码图像重组后(分为3×3或4×4),计算相邻图像间的像素差异,最小值即为正确位置。与前期某象验证码识别方法类似,需结合图像增强技术统一像素直方图。文章强调该方法仅供学习参考,严禁用于违法行为。完整识别流程包括图像重组、像素差异计算等步骤,最终可准确定位正确拼图位置。

码王吴彦祖的博客 285

Python 爬虫实战:雪球用户数据爬取与投资行为分析(含 API 签名算法解析)

雪球作为国内领先的投资者社区,拥有丰富的用户数据和投资信息。通过爬取雪球用户数据并进行分析,我们可以深入了解用户的持仓偏好、交易行为和投资策略,为企业和投资者提供有价值的市场洞察。

yansideyucsdn的博客 2247

MYSQL执行过程和顺序详解

就MySQL在执行过程、sql执行顺序,以及一些相关关键字的注意点方面的学习分享内容。 在参考文章的基础上,会增加自己的理解、看法,希望本文章能够在您的学习中提供帮助。 如有错误的地方,欢迎指出纠错,互相学习,共同进步。

Bananaaay的博客 3929

手把手教你学pcie--内存管理和保护机制(一):MPU与其他内存管理和保护机制详解

MPU(Memory Protection Unit)是一种专门用于 ​。,这些机制通常协同工作,形成多层防御体系,兼顾安全性、性能和灵活性。

MHD0815的博客 279

MySQL数据库SQL语句执行顺序及优化

一、sql执行顺序 (1)from (3) join (2) on (4) where (5)group by(开始使用select中的别名,后面的语句中都可以使用) (6) avg,sum… (7)having (8) select (9) distinct (10) order by (11) limit 从这个顺序中我们不难发现,所有的 查询语句都是从from开始执行的,在执行过程中,每个步骤都会为下一个步骤生成一个虚拟表,这个虚拟表将作为下一个执行步骤的输入。 第一步:首先对from子句中的前两个表

Damon_zqt的博客 1444

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

MySQL数据库SQL语句执行顺序

MySQL语句执行顺序:FROM &gt; 表链接(inner join、left join、right join) &gt; WHERE &gt;group by 进行分组 &gt; having过滤 &gt; select &gt; order by 语句排序 &gt; 分页语句...

weixin_42843907的博客 1874

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Oracle数据库和Mysql数据库的sql语句执行顺序

MYSQL数据库中sql的书写顺序: SELECT [DISTINCT] FROM JOIN ON WHERE GROUP BY HAVING UNION ORDER BY LIMIT MYSQL数据库中sql的执行顺序: FROM ON JOIN WHERE GROUP BY --执行后(有聚合函数),其结果一定是唯一的,也不需要针对这个字段使用distinct HAVING SELECT DISTINCT -- 要写在所有要查询字段的前面,后面有几个字段,就代表修饰几个字段,而不是紧随di

qq_41568604的博客 771

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

mysql数据库执行语句顺序_MySQL语句执行顺序和编写顺序实例解析

select语句完美语法:SELECTDISTINCT FROM JOIN ON WHERE GROUP BY HAVING ORDER BY LIMIT 执行顺序:from →join →on →where →group by→having→select→order by→limit(1)各个关键词的作用:from:需要从哪个数据表检索数据,如果有join则对 FROM 子句中的前两个表执行笛...

weixin_33152959的博客 277

mysql使用

常用命令 select version(); --查询数据库版本 select now(); --查询当前时间 \c --结束一条语句 exit或者\q --退出mysql。

fine_one的博客 223

【DB_MySQL】查询语句中各子句的执行顺序

1. FROM 指明查询来源 2. WHERE筛选元组 3. GROUP BY进行分组 4. HAVING 筛选分组 5. SELECT 投影出指定的字段列 6. ORDER BY 对结果集排序 7. LIMIT 取结果的子集 【总结】 ⑴若一查询语句包含上述七个子句,那么它会按照上述1~7步依次执行,每步都会产生一个中间结果。 ⑵一旦进行了GROUP BY分组,select子句...

weixin_30237281的博客 330

【MySQL】一条 SQL 查询语句在数据库中的执行流程 | SQL语句中各个关键字的执行顺序

主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!

努力让自己的能力配得上梦想. 794

数据库教程:mysql语句书写顺序和执行顺序的差异

mysql语句的书写顺序和执行顺序有很大差异。 书写顺序,mysql的一般书写顺写为: select <要返回的数据列> from <表名> join on where group by <分组条件> having <分组后的筛选条件> order by <排序条件> limit <行数限制> 然而其执行顺序却是: from <表名> # 笛卡尔积 on <筛选条件&.

C语言C++学习俱乐部:765860056 355

mysql语句执行逻辑_数据库中的SELECT语句逻辑执行顺序分析

引言这不是一个什么多深的技术问题,多么牛叉的编程能力。这跟一个人的开发能力也没有非常必然的直接关系,但是知道这些会对你的SQL编写,排忧及优化上会有很大的帮助。它不是一个复杂的知识点,但是一个非常基础的SQL根基。不了解这些,你一直用普通水泥盖房子;掌握这些,你是在用高等水泥盖房子。然而,就是这么一个小小的知识点,大家可以去调查一下周围的同事朋友,没准你会得到一个“惊喜”。由于这篇文章是突然有感而...

weixin_42500625的博客 254

【数据库】MySQL的语句执行顺序

MySQL的语句一共分为11步,如下图所标注的那样,最先执行的总是FROM操作,最后执行的是LIMIT操作。其中每一个操作都会产生一张虚拟的表,这个虚拟的表作为一个处理的输入,只是这些虚拟的表对用户来说是透明的,但是只有最后一个虚拟的表才会被作为结果返回。如果没有在语句中指定某一个子句,那么将会跳过相应的步骤。

377

mysql命令书写顺序,数据库教程:mysql语句书写顺序和执行顺序的差异

mysql语句的书写顺序和执行顺序有很大差异。 书写顺序,mysql的一般书写顺写为:selectfromjoinonwheregroup byhavingorder bylimit然而其执行顺序却是:from # 笛卡尔积on #对笛卡尔积的虚表进行筛选join#指定join,用于添加数据到on之后的虚表中,例如left join会将左表的剩余数据添加到虚表中where#对上述虚表进行筛选gro...

weixin_42144554的博客 130

Mysql数据库轻松学07—select语句书写顺序及执行顺序

select语句书写顺序 select语句执行顺序

小伟的博客 744

mysql数据库逻辑分析_数据库中的SELECT语句逻辑执行顺序分析_MySQL

引言这不是一个什么多深的技术问题,多么牛叉的编程能力。这跟一个人的开发能力也没有非常必然的直接关系,但是知道这些会对你的SQL编写,排忧及优化上会有很大的帮助。它不是一个复杂的知识点,但是一个非常基础的SQL根基。不了解这些,你一直用普通水泥盖房子;掌握这些,你是在用高等水泥盖房子。然而,就是这么一个小小的知识点,大家可以去调查一下周围的同事朋友,没准你会得到一个“惊喜”。由于这篇文章是突然有感而...

weixin_34608222的博客 211
上一篇: 14年本科毕业,转行软件测试,薪资13.5K
下一篇: 从零基础到车载测试工程师,薪资11K,肯拼搏的人,总会有所收获
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值