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 使用SQL语句修改表名的实现
Apr 07 MySQL
MySQL索引知识的一些小妙招总结
May 10 MySQL
MySQL 重命名表的操作方法及注意事项
May 21 MySQL
mysql在项目中怎么选事务隔离级别
May 25 MySQL
MySQL不使用order by实现排名的三种思路总结
Jun 02 MySQL
MySQL如何解决幻读问题
Aug 07 MySQL
MySQL面试题讲解之如何设置Hash索引
Nov 01 MySQL
MySQL基于索引的压力测试的实现
Nov 07 MySQL
千万级用户系统SQL调优实战分享
Mar 03 MySQL
优化Mysql查询的示例
Apr 26 MySQL
MySQL 执行数据库更新update操作的时候数据库卡死了
May 02 MySQL
MySql如何将查询的出来的字段进行转换
Jun 14 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 转义使用详解
2013/07/15 PHP
基于jquery用于查询操作的实现代码
2010/05/10 Javascript
使用Raygun来自动追踪AngularJS中的异常
2015/06/23 Javascript
jQuery实现带有洗牌效果的动画分页实例
2015/08/31 Javascript
全面解析Bootstrap表单使用方法(表单按钮)
2015/11/24 Javascript
Boostrap基础教程之JavaScript插件篇
2016/09/08 Javascript
js基础之DOM中元素对象的属性方法详解
2016/10/28 Javascript
有趣的bootstrap走动进度条
2016/12/01 Javascript
Javascript实现倒计时(防页面刷新)实例
2016/12/13 Javascript
使用Angular缓存父页面数据的方法
2017/01/03 Javascript
JavaScript实现简单的树形菜单效果
2017/06/23 Javascript
Node.js中的cluster模块深入解读
2018/06/11 Javascript
详解在Vue中使用TypeScript的一些思考(实践)
2018/07/06 Javascript
解决小程序无法触发SESSION问题
2020/02/03 Javascript
webpack3.0升级4.0的方法步骤
2020/04/02 Javascript
基于canvasJS在PHP中制作动态图表
2020/05/30 Javascript
Python实现简单文本字符串处理的方法
2018/01/22 Python
python导出hive数据表的schema实例代码
2018/01/22 Python
Pyqt5 实现跳转界面并关闭当前界面的方法
2019/06/19 Python
使用TensorBoard进行超参数优化的实现
2020/07/06 Python
HTML5 Canvas绘制文本及图片的基础教程
2016/03/14 HTML / CSS
澳大利亚在线百货商店:Real Smart
2017/08/13 全球购物
斯巴达比赛商店:Spartan Race
2019/01/08 全球购物
软件配置管理有什么好处
2015/04/15 面试题
资深财务管理人员自我评价
2013/09/22 职场文书
电脑销售顾问自荐信
2014/01/29 职场文书
十周年庆典策划方案
2014/06/03 职场文书
乒乓球兴趣小组活动总结
2014/07/08 职场文书
高考升学宴答谢词
2015/01/20 职场文书
公司捐书倡议书
2015/04/27 职场文书
幼儿园教师管理制度
2015/08/05 职场文书
《小摄影师》教学反思
2016/02/18 职场文书
2019同学聚会主持词
2019/05/06 职场文书
Oracle以逗号分隔的字符串拆分为多行数据实例详解
2021/07/16 Oracle
JS创建或填充任意长度数组的小技巧汇总
2021/10/24 Javascript
springboot读取nacos配置文件
2022/05/20 Java/Android