MySQL 语句执行顺序举例解析


Posted in MySQL onJune 05, 2022

1、SQL数据举例

举例:有10个用户,输出在订单表中下单数最多的5个人的名字。

my_user 表数据

MySQL 语句执行顺序举例解析

my_order数据

my_order,uid对应my_user表的id:

MySQL 语句执行顺序举例解析

测试数据生成

写一个存储过程,随机插入10000条数据:

CREATE DEFINER=`root`@`localhost` PROCEDURE `test_loop`( )  
 BEGIN  
 DECLARE  
     i INT DEFAULT 1;  
 WHILE  
     i < 10000 DO  
     INSERT INTO my_order ( oid, uid )  
 VALUES  
     (  
     CONCAT( 'o_', DATE_FORMAT( now( ), '%Y%m%d%h%i%s' ), FLOOR(1000 + RAND( )*(9999-1000) )),  
     FLOOR( 1 + RAND( ) * 10 )   
     );  
 SET i = i + 1;  
 END WHILE;  
 END

查询语句:

SELECT
	u.id,
	u.`name`,
	count( o.uid ) count_num 
FROM
	my_user u
	JOIN my_order o ON u.id = o.uid 
GROUP BY
	o.uid 
HAVING
	COUNT( o.uid ) 
ORDER BY
	COUNT( o.uid ) DESC 
	LIMIT 5;

查询结果(以自己数据为准):

MySQL 语句执行顺序举例解析

统计所有的用户订单数:

SELECT
	u.id,
	u.`name`,
	count( o.uid ) count_num 
FROM
	my_user u
	JOIN my_order o ON u.id = o.uid 
GROUP BY
	o.uid 
HAVING
	COUNT( o.uid ) 
ORDER BY
	COUNT( o.uid ) DESC

结果如下:

MySQL 语句执行顺序举例解析

该sql 主要考察 group by 和 having 的使用,然后 order by 和 desc 排序。

2、SQL的执行顺序

  • FORM: 对FROM左边的表和右边的表计算笛卡尔积,产生虚表VT1。
  • ON: 对虚表VT1进行ON过滤,只有那些符合的行才会被记录在虚表VT2中。
  • JOIN: 如果指定了OUTER JOIN(比如left join、 right join),那么保留表中未匹配的行就会作为外部行添加到虚拟表VT2中,产生虚拟表VT3。
  • WHERE: 对虚拟表VT3进行WHERE条件过滤。只有符合的记录才会被插入到虚拟表VT4中。
  • GROUP BY: 根据group by子句中的列,对VT4中的记录进行分组操作,产生VT5。
  • HAVING: 对虚拟表VT5应用having过滤,只有符合的记录才会被 插入到虚拟表VT6中。
  • SELECT: 执行select操作,选择指定的列,插入到虚拟表VT7中。
  • DISTINCT: 对VT7中的记录进行去重。产生虚拟表VT8.
  • ORDER BY: 将虚拟表VT8中的记录按照进行排序操作,产生虚拟表VT9.
  • LIMIT:取出指定行的记录,产生虚拟表VT10, 并将结果返回。

到此这篇关于MySQL 语句执行顺序举例解析的文章就介绍到这了,更多相关MySQL 语句执行顺序内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
教你用eclipse连接mysql数据库
Apr 22 MySQL
MySQL 角色(role)功能介绍
Apr 24 MySQL
MySQL kill不掉线程的原因
May 07 MySQL
MySQL sql_mode修改不生效的原因及解决
May 07 MySQL
JDBC连接的六步实例代码(与mysql连接)
May 12 MySQL
MySQL 百万级数据的4种查询优化方式
Jun 07 MySQL
新手入门Mysql--sql执行过程
Jun 20 MySQL
MySQL七大JOIN的具体使用
Feb 28 MySQL
MySQL数据库如何给表设置约束详解
Mar 13 MySQL
WINDOWS 64位 下安装配置mysql8.0.25最详细的教程
Mar 22 MySQL
MySQL RC事务隔离的实现
Mar 31 MySQL
聊聊mysql都有哪几种分区方式
Apr 13 MySQL
MySql数据库触发器使用教程
Jun 01 #MySQL
MySQL选择合适的备份策略和备份工具
MySQL普通表如何转换成分区表
May 30 #MySQL
Mysql将字符串按照指定字符分割的正确方法
May 30 #MySQL
MySQL数据库安装方法与图形化管理工具介绍
MySQL数据库简介与基本操作
May 30 #MySQL
Mysql数据库事务的脏读幻读及不可重复读详解
May 30 #MySQL
You might like
PHP 采集心得技巧
2009/05/15 PHP
PHP 手机归属地查询 api
2010/02/08 PHP
php引用地址改变变量值的问题
2012/03/23 PHP
PHP实现绘制3D扇形统计图及图片缩放实例
2014/10/01 PHP
jQuery+PHP实现的掷色子抽奖游戏实例
2015/01/04 PHP
PHP实现多维数组转字符串和多维数组转一维数组的方法
2015/08/08 PHP
php微信开发之图片回复功能
2018/06/14 PHP
PHP实现的简单留言板功能示例【基于thinkPHP框架】
2018/12/07 PHP
javascript demo 基本技巧
2009/12/18 Javascript
jQuery 学习第六课 实现一个Ajax的TreeView
2010/05/17 Javascript
关于jquery中全局函数each使用介绍
2013/12/10 Javascript
功能强大的Bootstrap使用手册(一)
2016/08/02 Javascript
Node.js connect ECONNREFUSED错误解决办法
2016/09/15 Javascript
JavaScript错误处理和堆栈追踪详解
2017/04/18 Javascript
bootstrap fileinput组件整合Springmvc上传图片到本地磁盘
2017/05/11 Javascript
浅谈JavaScript作用域和闭包
2017/09/18 Javascript
Vue.js中的computed工作原理
2018/03/22 Javascript
详解微信小程序的 request 封装示例
2018/08/21 Javascript
简单的React SSR服务器渲染实现
2018/12/11 Javascript
Vuerouter的beforeEach与afterEach钩子函数的区别
2018/12/26 Javascript
微信小程序实现获取小程序码和二维码java接口开发
2019/03/29 Javascript
elementUI table表格动态合并的示例代码
2019/05/15 Javascript
JS前端知识点总结之内置对象,日期对象和定时器相关操作
2019/07/05 Javascript
[54:09]RNG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
[01:37]PWL S2开团时刻DAY1&2——这符有毒
2020/11/20 DOTA
python抓取网页时字符集转换问题处理方案分享
2014/06/19 Python
Windows下Anaconda的安装和简单使用方法
2018/01/04 Python
python数字图像处理之骨架提取与分水岭算法
2018/04/27 Python
Python提取特定时间段内数据的方法实例
2019/04/01 Python
css3背景_动力节点Java学院整理
2017/07/11 HTML / CSS
美国班级戒指、帽子和礼服、毕业产品、年鉴:Balfour
2018/11/01 全球购物
工程管理造价应届生求职信
2013/11/13 职场文书
五四青年节优秀演讲稿范文
2014/05/28 职场文书
八年级地理课件资料及考点知识分享
2019/08/30 职场文书
SQL注入的实现以及防范示例详解
2021/06/02 MySQL
Pytest中skip skipif跳过用例详解
2021/06/30 Python