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 14 MySQL
详解GaussDB for MySQL性能优化
May 18 MySQL
MySQL中使用or、in与union all在查询命令下的效率对比
May 26 MySQL
MySQL 亿级数据导入导出及迁移笔记
Jun 18 MySQL
MySQL 5.7常见数据类型
Jul 15 MySQL
SQL实现LeetCode(197.上升温度)
Aug 07 MySQL
MySQL基于索引的压力测试的实现
Nov 07 MySQL
浅谈mysql哪些情况会导致索引失效
Nov 20 MySQL
一文了解MySQL二级索引的查询过程
Feb 24 MySQL
MYSQL优化之数据表碎片整理详解
Apr 03 MySQL
MySQL数据库Innodb 引擎实现mvcc锁
May 06 MySQL
mysql如何查询连续记录
May 11 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编程最快明白》第四讲:日期、表单接收、session、cookie
2010/11/01 PHP
PHP 关于访问控制的和运算符优先级介绍
2013/07/08 PHP
php把session写入数据库示例
2014/02/26 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
2017/04/10 PHP
PHP convert_uudecode()函数讲解
2019/02/14 PHP
与jquery serializeArray()一起使用的函数,主要来方便提交表单
2011/01/31 Javascript
javascript父、子页面交互技巧总结
2014/08/08 Javascript
使用JavaScript的AngularJS库编写hello world的方法
2015/06/23 Javascript
Js动态设置rem来实现移动端字体的自适应代码
2016/10/14 Javascript
浅谈jQuery中Ajax事件beforesend及各参数含义
2016/12/03 Javascript
微信小程序 登录的简单实现
2017/04/19 Javascript
Angular项目中$scope.$apply()方法的使用详解
2017/07/26 Javascript
为输入框加入数字js校验代码分享
2017/11/02 Javascript
js推箱子小游戏步骤代码解析
2018/01/10 Javascript
Webpack之tree-starking 解析
2018/09/11 Javascript
vue移动端使用appClound拉起支付宝支付的实现方法
2019/11/21 Javascript
[03:43]2014DOTA2西雅图国际邀请赛 newbee战队巡礼
2014/07/07 DOTA
[00:44]2016完美“圣”典 风云人物:Mikasa宣传片
2016/12/07 DOTA
[01:06]欢迎来到上海,TI9
2018/08/26 DOTA
python函数的5种参数详解
2017/02/24 Python
详解Python中的Numpy、SciPy、MatPlotLib安装与配置
2017/11/17 Python
用python处理图片实现图像中的像素访问
2018/05/04 Python
详解python3 + Scrapy爬虫学习之创建项目
2019/04/12 Python
python中的global关键字的使用方法
2019/08/20 Python
Python异常模块traceback用法实例分析
2019/10/22 Python
python操作cfg配置文件方式
2019/12/22 Python
Python找出列表中出现次数最多的元素三种方式
2020/02/24 Python
Python包和模块的分发详细介绍
2020/06/19 Python
Python3合并两个有序数组代码实例
2020/08/11 Python
OpenCV利用python来实现图像的直方图均衡化
2020/10/21 Python
Bootstrap File Input文件上传组件
2020/12/01 HTML / CSS
大学生的网上创业计划书
2013/12/31 职场文书
高中校园广播稿
2014/01/11 职场文书
汇报材料怎么写
2014/12/30 职场文书
投标邀请书范本
2015/02/02 职场文书
设备技术员岗位职责
2015/04/11 职场文书