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 相关文章推荐
MySQL表的增删改查(基础)
Apr 05 MySQL
mysql字符串截取函数小结
Apr 05 MySQL
MySQL pt-slave-restart工具的使用简介
Apr 07 MySQL
详解MySQL事务的隔离级别与MVCC
Apr 22 MySQL
MySQL update set 和 and的区别
May 08 MySQL
MySQL系列之六 用户与授权
Jul 02 MySQL
MySQL 聚合函数排序
Jul 16 MySQL
MySQL中的隐藏列的具体查看
Sep 04 MySQL
为什么MySQL 删除表数据 磁盘空间还一直被占用
Oct 16 MySQL
SQL语法CONSTRAINT约束操作详情
Jan 18 MySQL
MySQL中一条update语句是如何执行的
Mar 16 MySQL
MySQL sql模式设置引起的问题
May 15 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
提问的智慧(2)
2006/10/09 PHP
解析php file_exists无效的解决办法
2013/06/26 PHP
解析file_get_contents模仿浏览器头(user_agent)获取数据
2013/06/27 PHP
PHP反射机制用法实例
2014/08/28 PHP
PHP使用JSON和将json还原成数组
2015/02/12 PHP
Laravel5.0+框架邮件发送功能实现方法图文与实例详解
2019/04/23 PHP
获取表单控件原始(初始)值的方法
2013/08/21 Javascript
一个简单的全屏图片上下打开显示网页效果示例
2014/07/08 Javascript
jQuery+ajax实现无刷新级联菜单示例
2015/05/21 Javascript
js仿3366小游戏选字游戏
2016/04/14 Javascript
D3.js实现直方图的方法详解
2016/09/25 Javascript
EditPlus中的正则表达式 实战(2)
2016/12/15 Javascript
详解为Angular.js内置$http服务添加拦截器的方法
2016/12/20 Javascript
Bootstrap popover用法详解
2016/12/22 Javascript
react.js 翻页插件实例代码
2017/01/19 Javascript
微信小程序 页面传值详解
2017/03/10 Javascript
bootstrap fileinput插件实现预览上传照片功能
2018/01/23 Javascript
在Vue methods中调用filters里的过滤器实例
2018/08/30 Javascript
微信小程序实现分享朋友圈的图片功能示例
2019/01/18 Javascript
ES6中Set和Map用法实例详解
2020/03/02 Javascript
Node.js API详解之 zlib模块用法分析
2020/05/19 Javascript
python基于multiprocessing的多进程创建方法
2015/06/04 Python
简单解析Django框架中的表单验证
2015/07/17 Python
TensorFLow用Saver保存和恢复变量
2018/03/10 Python
Python SVM(支持向量机)实现方法完整示例
2018/06/19 Python
python 在指定范围内随机生成不重复的n个数实例
2019/01/28 Python
基于Numpy.convolve使用Python实现滑动平均滤波的思路详解
2019/05/16 Python
Python startswith()和endswith() 方法原理解析
2020/04/28 Python
20行Python代码实现一款永久免费PDF编辑工具的实现
2020/08/27 Python
python中slice参数过长的处理方法及实例
2020/12/15 Python
经济实惠的豪华背包和行李袋:Packs Project
2018/10/17 全球购物
大学生的四年学习自我评价
2013/12/13 职场文书
公司保密承诺书
2014/03/27 职场文书
租车协议书
2015/01/27 职场文书
无犯罪记录证明样本
2015/06/16 职场文书
2016年员工政治思想表现评语
2015/12/02 职场文书