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 user权限表
Jun 18 MySQL
mysql优化之query_cache_limit参数说明
Jul 01 MySQL
MySQL系列之十五 MySQL常用配置和性能压力测试
Jul 02 MySQL
解决mysql的int型主键自增问题
Jul 15 MySQL
Mysql排序的特性详情
Nov 01 MySQL
MySQL慢查询优化解决问题
Mar 17 MySQL
MySQL中优化SQL语句的方法(show status、explain分析服务器状态信息)
Apr 09 MySQL
mysql5.5中文乱码问题解决的有用方法
May 30 MySQL
Mysql中@和@@符号的详细使用指南
Jun 05 MySQL
mysql全面解析json/数组
Jul 07 MySQL
MySQL一劳永逸永久支持输入中文的方法实例
Aug 05 MySQL
MySql按时,天,周,月进行数据统计
Aug 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生成树的方法
2015/07/28 PHP
PHP微信开发之查询城市天气
2016/06/23 PHP
PHP模型Model类封装数据库操作示例
2019/03/14 PHP
PHP MVC框架中类的自动加载机制实例分析
2019/09/18 PHP
ExtJS 2.0实用简明教程 之Border区域布局
2009/04/29 Javascript
javascript中利用数组实现的循环队列代码
2010/01/24 Javascript
js函数中onmousedown和onclick的区别和联系探讨
2013/05/19 Javascript
JS设置获取cookies的方法
2014/01/26 Javascript
一个不错的仿携程自定义数据下拉选择select
2014/09/01 Javascript
javascript跨域原因以及解决方案分享
2015/04/08 Javascript
js实现仿微博滚动显示信息的效果
2015/12/21 Javascript
jQuery动态创建元素以及追加节点的实现方法
2016/10/20 Javascript
使用Angular缓存父页面数据的方法
2017/01/03 Javascript
Bootstrap面板(Panels)的简单实现代码
2017/03/17 Javascript
在Vue项目中引入JQuery-ui插件的讲解
2019/01/27 jQuery
js纯前端实现腾讯cos文件上传功能的示例代码
2019/05/14 Javascript
[01:02:53]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第二局
2016/03/06 DOTA
[01:04]不如跳舞!DOTA2新英雄玛尔斯的欢乐日常
2019/03/11 DOTA
编写同时兼容Python2.x与Python3.x版本的代码的几个示例
2015/03/30 Python
Python函数返回值实例分析
2015/06/08 Python
python 实现对文件夹中的图像连续重命名方法
2018/10/25 Python
漂亮的Django Markdown富文本app插件的实现
2019/01/02 Python
python批量爬取下载抖音视频
2019/06/17 Python
python自动化UI工具发送QQ消息的实例
2019/08/27 Python
Python学习笔记之函数的参数和返回值的使用
2019/11/20 Python
python 实现多维数组(array)排序
2020/02/28 Python
2021年的Python 时间轴和即将推出的功能详解
2020/07/27 Python
AmazeUI在模态框中嵌入表单形成模态输入框
2020/08/20 HTML / CSS
linux面试题参考答案(4)
2014/09/21 面试题
《在山的那边》教学反思
2014/02/23 职场文书
班级学习计划书
2014/04/27 职场文书
物流管理系毕业生求职信
2014/06/03 职场文书
学生上课看漫画的检讨书
2014/09/26 职场文书
环卫工作个人总结
2015/03/04 职场文书
离婚纠纷代理词
2015/05/23 职场文书
创业的9条正确思考方式
2019/08/26 职场文书