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 重命名表的操作方法及注意事项
May 21 MySQL
MySQL 外键约束和表关系相关总结
Jun 20 MySQL
新手入门Mysql--sql执行过程
Jun 20 MySQL
MYSQL 运算符总结
Nov 11 MySQL
SQL 聚合、分组和排序
Nov 11 MySQL
深入理解mysql事务隔离级别和存储引擎
Apr 12 MySQL
MySQL脏读,幻读和不可重复读
May 11 MySQL
MySQL中正则表达式(REGEXP)使用详解
Jul 07 MySQL
MySQL生成千万测试数据以及遇到的问题
Aug 05 MySQL
MySQL下载安装配置详细教程 附下载资源
Sep 23 MySQL
mysql序号rownum行号实现方式
Dec 24 MySQL
SQL中去除重复数据的几种方法汇总(窗口函数对数据去重)
May 08 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
比特率,大家看看这个就不用收音机音质去比MP3音质了
2021/03/01 无线电
PHP中include()与require()的区别说明
2010/03/10 PHP
PHP上传图片进行等比缩放可增加水印功能
2014/01/13 PHP
PHP统计当前在线用户数实例讲解
2015/10/21 PHP
JQuery 常用方法和事件详细介绍
2013/04/18 Javascript
jQuery 的全选(全非选)即取得被选中的值使用介绍
2013/11/12 Javascript
深入理解JS addLoadEvent函数
2016/05/20 Javascript
利用Node.js对文件进行重命名
2017/03/12 Javascript
Vue列表渲染的示例代码
2018/11/01 Javascript
iview tabs 顶部导航栏和模块切换栏的示例代码
2019/03/04 Javascript
微信小程序中使用 async/await的方法实例分析
2020/05/06 Javascript
浅谈vue中resetFields()使用注意事项
2020/08/12 Javascript
javascript实现移动端上传图片功能
2020/08/18 Javascript
vue中实现弹出层动画效果的示例代码
2020/09/25 Javascript
[48:20]OpTic vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python完成FizzBuzzWhizz问题(拉勾网面试题)示例
2014/05/05 Python
Python的requests网络编程包使用教程
2016/07/11 Python
python解决方案:WindowsError: [Error 2]
2016/08/28 Python
python中is与双等于号“==”的区别示例详解
2017/11/21 Python
pandas修改DataFrame列名的方法
2018/04/08 Python
解决python "No module named pip" 的问题
2018/10/13 Python
Python 中如何实现参数化测试的方法示例
2019/12/10 Python
python颜色随机生成器的实例代码
2020/01/10 Python
Django如何继承AbstractUser扩展字段
2020/11/27 Python
html5的websockets全双工通信详解学习示例
2014/02/26 HTML / CSS
瑞士国际航空官网:SWISS
2016/07/21 全球购物
LINUX下线程,GDI类的解释
2012/04/17 面试题
初中毕业生的自我评价
2014/03/03 职场文书
农村面貌改造提升实施方案
2014/03/18 职场文书
求职信怎么写
2014/05/23 职场文书
2014年预算员工作总结
2014/12/05 职场文书
2016年高校自主招生自荐信范文
2015/03/24 职场文书
全国法制宣传日活动总结
2015/05/05 职场文书
开学季:喜迎新生,迎新标语少不了
2019/11/07 职场文书
python异常中else的实例用法
2021/06/15 Python
Java练习之潜艇小游戏的实现
2022/03/16 Java/Android