news 2026/2/4 10:28:09

MySQL 语句书写顺序与执行顺序对比速记表

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySQL 语句书写顺序与执行顺序对比速记表

顺序

书写顺序执行顺序核心说明
1. SELECT6. SELECT筛选返回字段、执行字段计算或定义别名
2. FROM1. FROM/JOIN确定查询基础表,执行表关联操作(内连接、左连接等)
3. WHERE2. WHERE过滤原始表数据,不能使用聚合函数
4. GROUP BY3. GROUP BY将 WHERE 过滤后的数据按指定字段分组
5. HAVING5. HAVING过滤分组后的聚合结果,可使用聚合函数
6. ORDER BY8. ORDER BY对最终结果排序,可使用 SELECT 定义的别名
7. LIMIT/OFFSET9. LIMIT/OFFSET截取排序后的结果集,限制返回行数
-4. 聚合函数计算紧跟 GROUP BY,执行 SUM/COUNT/AVG 等统计计算
-7. DISTINCT对 SELECT 筛选后的结果进行去重处理

关键速记要点

  1. 执行核心逻辑:先确定数据源(FROM/JOIN)→ 过滤原始数据(WHERE)→ 分组(GROUP BY)→ 聚合计算 → 过滤分组结果(HAVING)→ 筛选字段(SELECT)→ 去重(DISTINCT)→ 排序(ORDER BY)→ 截取结果(LIMIT)
  2. WHERE vs HAVING:WHERE 管 “分组前”,不能用聚合函数;HAVING 管 “分组后”,可以用聚合函数
  3. 别名使用:ORDER BY 可以用 SELECT 定义的字段别名,因为它执行在 SELECT 之后

示例

1. 先创建测试表并插入数据

我们以电商订单表为例,包含商品分类、订单金额、下单时间等字段,贴合实际业务场景

-- 创建订单表 CREATE TABLE t_order ( order_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '订单ID', user_id INT NOT NULL COMMENT '用户ID', product_category VARCHAR(50) NOT NULL COMMENT '商品分类', order_amount DECIMAL(10,2) NOT NULL COMMENT '订单金额', order_time DATETIME NOT NULL COMMENT '下单时间' ) COMMENT '电商订单表'; -- 插入测试数据 INSERT INTO t_order (user_id, product_category, order_amount, order_time) VALUES (101, '电子产品', 3999.00, '2025-01-10 14:30:00'), (102, '电子产品', 2999.00, '2025-01-15 10:20:00'), (103, '服装鞋帽', 299.00, '2025-01-12 09:15:00'), (104, '服装鞋帽', 599.00, '2025-01-18 16:40:00'), (105, '食品生鲜', 89.00, '2025-01-20 11:00:00'), (106, '电子产品', 1999.00, '2025-01-22 15:30:00'), (107, '服装鞋帽', 199.00, '2025-01-25 08:20:00'), (108, '食品生鲜', 129.00, '2025-01-28 19:10:00');

2. 完整查询 SQL(含分组、聚合、排序)

需求:统计 2025 年 1 月各商品分类的订单总金额、订单数量,筛选出总金额大于 1000 的分类,按总金额降序排序

SELECT product_category AS 商品分类, SUM(order_amount) AS 分类总金额, COUNT(order_id) AS 订单数量 FROM t_order WHERE order_time BETWEEN '2025-01-01 00:00:00' AND '2025-01-31 23:59:59' GROUP BY product_category HAVING SUM(order_amount) > 1000 ORDER BY 分类总金额 DESC;

3. 分步执行结果解析

执行步骤对应子句执行结果说明
1FROM t_order确定数据源为订单表,获取 8 条原始订单数据
2WHERE order_time BETWEEN...过滤出 2025 年 1 月的订单,仍为 8 条(测试数据均符合)
3GROUP BY product_category按商品分类分组,得到 3 个分组:电子产品、服装鞋帽、食品生鲜
4聚合函数计算(SUM/COUNT)计算每个分组的总金额和订单数:电子产品:3999+2999+1999=8997,共 3 单服装鞋帽:299+599+199=1097,共 3 单食品生鲜:89+129=218,共 2 单
5HAVING SUM(order_amount) > 1000过滤掉总金额≤1000 的分组,保留电子产品、服装鞋帽2 个分组
6SELECT筛选并返回商品分类、总金额、订单数量 3 个字段,应用别名
7ORDER BY 分类总金额 DESC按总金额降序排序,最终结果顺序:电子产品 → 服装鞋帽

4. 最终查询结果

商品分类分类总金额订单数量
电子产品8997.003
服装鞋帽1097.003
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/4 10:27:55

Nginx 高频面试题(含答案)

一、基础概念题(必问)1. Nginx 是什么?核心应用场景?Nginx 是高性能、轻量级的 HTTP Web 服务器、反向代理服务器、邮件代理服务器。核心场景:静态资源 Web 服务(HTML/CSS/JS/ 图片)反向代理、负…

作者头像 李华
网站建设 2026/2/4 10:27:47

Java面试必看:XML文档定义与解析方式全面剖析

文章目录 Java面试必看:XML文档定义与解析方式全面剖析一、XML概述:为什么我们需要XML?XML的特点为什么在Java中使用XML? 二、XML文档定义方式1. DTD(Document Type Definition)DTD的基本结构DTD的优点与缺…

作者头像 李华
网站建设 2026/2/4 10:24:27

超越Adam:深入探索Nesterov动量与自适应学习率优化器及其实现

好的,收到您的需求。我将以“超越Adam:深入探索Nesterov动量与自适应学习率优化器及其实现”为题,撰写一篇深入、新颖且适合开发者阅读的技术文章。 以下是为您生成的完整文章。超越Adam:深入探索Nesterov动量与自适应学习率优化器…

作者头像 李华
网站建设 2026/2/4 10:24:13

Spark做ETL,与Ray/Daft做特征工程的区别在哪里,如何选型?

如果你熟悉 Spark,大概率会有过这样的困惑:Spark都统治大数据领域十年了,算子成熟、生态完善,为什么做特征工程时,大家还要费劲巴拉去学Ray Data、Daft这些新框架?更不用说,这些新框架的API&…

作者头像 李华
网站建设 2026/2/4 10:22:08

2025年中国互联网开发技术就业及薪酬趋势报告

1. 2025年中国互联网人才市场宏观背景分析 2025年,中国互联网人才市场正经历从“规模扩张”向“效能驱动”的根本性转向。在技术创新(尤其是人工智能)的强力支撑下,招聘市场在波动中展现出结构性的回暖,但求职侧的竞争维度已发生本质改变。 核心统计指标: 人才供需压力…

作者头像 李华