news 2026/5/1 6:49:05

MySQL知识汇总:讲一讲MySQL中Select语句的执行顺序

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MySQL知识汇总:讲一讲MySQL中Select语句的执行顺序

MySQL 中 SELECT 语句的逻辑执行顺序
(非常重要且经常被问到的高频知识点)

MySQL 的 SELECT 语句书写顺序实际执行顺序是完全不同的,这是很多人在理解 SQL 执行过程时最容易混淆的地方。

书写顺序(我们平时怎么写的)

SELECT...,...FROM...JOIN...WHERE...GROUPBY...HAVING...ORDERBY...LIMIT...

实际逻辑执行顺序(MySQL 真正处理的顺序)

顺序关键字/子句说明是否能使用前面产生的别名执行次数
1FROM确定要查询的表/视图,并进行笛卡尔积(如果多表)1
2JOIN / ON执行各种 JOIN(LEFT/RIGHT/INNER/CROSS 等)1
3WHERE对连接后的结果集进行过滤(最早能做过滤的位置)不能使用 SELECT 中的别名1
4GROUP BY按指定字段分组(分组前会先做聚合前的排序优化)不能使用 SELECT 中的别名1
5聚合函数(COUNT/SUM等)在分组的基础上计算聚合值按分组次数
6HAVING对分组后的结果进行过滤(是唯一可以直接使用聚合函数过滤的地方)可以使用 SELECT 中的别名1
7SELECT最终决定要返回哪些列,可以使用表达式、别名、聚合函数等1
8DISTINCT去重(如果有的话)1
9ORDER BY对最终结果集排序可以使用 SELECT 中的别名1
10LIMIT / OFFSET分页限制1

简洁记忆口诀(推荐背诵)

“从哪来 → 连哪去 → 筛哪群 → 聚哪算 → 再筛哪 → 选哪列 → 排哪序 → 取哪几”

更短的版本(7个字):

从连筛聚算选排取

常见的“为什么报错”与“为什么结果不对”的典型例子

-- 错误写法1:WHERE 里不能用别名SELECTage/12ASage_yearFROMusersWHEREage_year>3;-- 报错:Unknown column 'age_year'-- 正确写法1SELECTage/12ASage_yearFROMusersHAVINGage_year>3;-- 可以(HAVING 能识别别名)-- 或使用子查询/派生表SELECT*FROM(SELECTage/12ASage_yearFROMusers)tWHEREt.age_year>3;
-- 错误写法2:ORDER BY 里能用别名,但 WHERE 不行SELECTid,COUNT(*)AScntFROMordersGROUPBYidORDERBYcntDESC;-- 正确-- 但这样不行:WHEREcnt>10-- 错误HAVINGcnt>10-- 正确

快速对照表(面试/写 SQL 必备)

想在这位置使用别名?能用别名?能用聚合函数?典型用法场景
WHERE××原始数据过滤
GROUP BY××分组字段
HAVING○(MySQL特有)分组后过滤
SELECT—(自己定义)决定输出列
ORDER BY排序(最常用别名的地方)
LIMIT分页

2024-2025 年常考变种问题

  1. WHERE 和 HAVING 区别(背诵经典回答)
  2. GROUP BY + ORDER BY 的隐含排序(MySQL 5.7 之前默认按 GROUP BY 排序,8.0 之后取消了)
  3. 窗口函数(OVER)是在哪个阶段执行的?(SELECT 阶段之后,但 ORDER BY 之前)
  4. 同一个查询里 HAVING 能用别名,WHERE 为什么不行?(因为执行顺序不同)

一句话总结(可以直接用来回答面试):

MySQL SELECT 语句的逻辑执行顺序是:
FROM → JOIN → WHERE → GROUP BY → 聚合 → HAVING → SELECT → DISTINCT → ORDER BY → LIMIT

这个顺序几乎决定了你在 SQL 里能写什么、不能写什么、写在哪里

需要我继续讲更深入的执行细节吗?
比如:

  • 实际物理执行计划可能怎么优化这个逻辑顺序
  • 窗口函数、子查询、CTE 分别在哪个阶段介入
  • 为什么很多 DBA 更喜欢把过滤条件写在 FROM 子句的 JOIN ON 里而不是 WHERE

告诉我你想往哪个方向继续深入~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 19:41:02

手把手教你9款AI神器1天生成25000字论文

还在为论文的Deadline焦头烂额吗?从选题、查文献、搭建框架到反复修改、降重、格式调整,写论文仿佛是一场没有尽头的马拉松。今天,作为一名资深“论文斗士”,我将为你彻底改变这一局面。我将手把手教你,如何巧妙地组合…

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

基于Spring Boot的疗养院管理系统的设计与实现(11711)

有需要的同学,源代码和配套文档领取,加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码(前后端源代码SQL脚本)配套文档(LWPPT开题报告)远程调试控屏包运行 三、技术介绍 Java…

作者头像 李华
网站建设 2026/4/22 21:49:39

基于MATLAB的单闭环直流调速系统设计(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

基于MATLAB的单闭环直流调速系统设计(设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码 本设计包括设计报告,仿真程序,电气接线图。 设计要求 (1)该调速系统能进行平滑的速度调节&a…

作者头像 李华
网站建设 2026/5/1 6:44:21

PMP知识--十大知识域(下)

六 项目资源管理规划资源管理&估算活动资源规划资源管理估算活动资源获取资源&建设团队获取资源建设团队塔克曼阶梯理论(重点)建设团队的工具与技术管理团队&控制资源管理团队冲突管理情商控制资源七 项目沟通管理概述&规划沟通管理概述…

作者头像 李华
网站建设 2026/4/30 3:55:06

基于Spring Boot的酒店管理系统_n4w99n6v-java毕业设计

目录摘要关于博主开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!摘要 该系统基于Spring Boot框架开发,旨在为酒店行业提供高效、智能化的管理解决方案。采用B/S架构&#xff0c…

作者头像 李华
网站建设 2026/4/22 6:59:49

随想-关于光速极限

其实说到这里,为啥不能超过光速,这事已经没啥可说的了。答案就是不为啥,也没有说宇宙把速度限制到了光速。其实放下各种复杂的理论不谈,就只是说这个想法,是不是有点自大。宇宙之大无奇不有,为啥非得去限制…

作者头像 李华