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服务添加 iptables防火墙策略的方案
Apr 29 MySQL
IDEA 链接Mysql数据库并执行查询操作的完整代码
May 20 MySQL
MySQL注入基础练习
May 30 MySQL
MySQL系列之三 基础篇
Jul 02 MySQL
SQL实现LeetCode(180.连续的数字)
Aug 04 MySQL
MySQL去除重叠时间求时间差和的实现
Aug 23 MySQL
MySQL和Oracle批量插入SQL的通用写法示例
Nov 17 MySQL
MySQL8.0 Undo Tablespace管理详解
Jun 16 MySQL
MySQL数据库表约束讲解
Jun 21 MySQL
MySQL中正则表达式(REGEXP)使用详解
Jul 07 MySQL
Mysql中mvcc各场景理解应用
Aug 05 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出现内存位置访问无效错误问题解决方法
2014/08/16 PHP
thinkphp特殊标签用法概述
2014/11/24 PHP
php递归删除指定文件夹的方法小结
2015/04/20 PHP
php生成txt文件实例代码介绍
2016/04/28 PHP
javascript的函数
2007/01/31 Javascript
用javascript自动显示最后更新时间
2007/03/15 Javascript
JQuery 1.4 中的Ajax问题
2010/01/23 Javascript
多种方法判断Javascript对象是否存在
2013/09/22 Javascript
jQuery原理系列-常用Dom操作详解
2016/06/07 Javascript
如何在JS中实现相互转换XML和JSON
2016/07/19 Javascript
详解HTTPS 的原理和 NodeJS 的实现
2017/07/04 NodeJs
手动用webpack搭建第一个ReactApp的示例
2018/04/11 Javascript
详解vue使用vue-layer-mobile组件实现toast,loading效果
2018/08/31 Javascript
vue动态设置img的src路径实例
2018/09/18 Javascript
layui数据表格跨行自动合并的例子
2019/09/02 Javascript
Django在Win7下的安装及创建项目hello word简明教程
2014/07/14 Python
简介Python中用于处理字符串的center()方法
2015/05/18 Python
python语言使用技巧分享
2016/05/31 Python
Python数据结构与算法之字典树实现方法示例
2017/12/13 Python
Python基于xlrd模块操作Excel的方法示例
2018/06/21 Python
Python将string转换到float的实例方法
2019/07/29 Python
Python超越函数积分运算以及绘图实现代码
2019/11/20 Python
在Python中使用turtle绘制多个同心圆示例
2019/11/23 Python
python主线程与子线程的结束顺序实例解析
2019/12/17 Python
Python 实现平台类游戏添加跳跃功能
2020/03/27 Python
详解python内置模块urllib
2020/09/09 Python
python调用有道智云API实现文件批量翻译
2020/10/10 Python
法国设计制造的扫帚和刷子:Andrée Jardin
2018/12/06 全球购物
少先队学雷锋活动总结范文
2014/03/09 职场文书
汽车检测与维修专业求职信
2014/07/04 职场文书
送温暖献爱心活动总结
2014/07/08 职场文书
合作协议书模板2014
2014/09/26 职场文书
解除劳动关系协议书2篇
2014/11/28 职场文书
承诺书范本
2015/01/21 职场文书
2015年超市工作总结范文
2015/05/26 职场文书
2016年机关单位节能宣传周活动总结
2016/04/05 职场文书