当前位置: 首页 > news >正文

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

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

http://www.jsqmd.com/news/254729/

相关文章:

  • Linux内核TCP网络模块深度分析
  • 2026最新农业名牌访谈录推荐!国内畜牧业/区域特色农业权威访谈机构榜单发布,深度解析产业发展助力品牌升级 - 品牌推荐2026
  • 【图像融合】基于matlab GUI小波变换红外和可见光图像融合(含评价指标)【含Matlab源码 14958期】
  • 2026最新农产品区域公用品牌服务推荐!中国农业特色产业/区域特色农业/地理标志农产品权威服务机构榜单发布,助力农业品牌高质量发展 - 品牌推荐2026
  • 《Spring核心机制》第六篇:一篇读懂SPI
  • ACP:1.让 AI 工具配置与能力管理,真正走向体系化
  • 【图像融合】基于matlab高分辨率全色图IHS图像融合(含评价指标)【含Matlab源码 14959期】
  • 时间序列因果推断:顶会发文的 “黄金赛道”,新手也能上手
  • 深入了解 Python 中的 Scrapy:强大的网络爬虫框架
  • 测试用例管理怎么做度量?6个指标思路和工具对比
  • 【图像融合】高分辨率全色图IHS图像融合(含评价指标)【含Matlab源码 14959期】
  • 产品方案评审前一晚,我让AI先帮我当了一次“领导”
  • 【Linux】五种IO模型与非阻塞IO
  • 救命神器!8款AI论文软件测评:本科生毕业论文痛点全解决
  • 多模融合时代,文档数据库正在被重新定义——金仓数据库如何构建新一代文档数据底座
  • 进程间通信(IPC)完全指南:原理、实现与最佳实践
  • 2026国内最新爆款裤料品牌top5推荐!广东广州等地优质裤料供应商权威榜单发布,创新工艺与品质保障助力服饰产业升级 - 品牌推荐2026
  • AI智慧餐食机物联网平台懒人专属寻投资人
  • 【图像融合】小波变换红外和可见光图像融合(含评价指标)【含GUI Matlab源码 14958期】
  • 【1 月小记】Part 3: 概率 DP - L
  • Webpack 在异步请求 JS 文件时获取 JS Bundle 的机制
  • OLAP在大数据营销分析中的关键作用
  • 常量
  • 2026年口碑好的市政路灯,新农村路灯,锂电太阳能路灯厂家实力品牌推荐榜 - 品牌鉴赏师
  • ArkTS问题:怎么提升代码的优先级呢?
  • 2026年有实力的草坪灯,景观灯,景观灯厂家口碑品牌推荐榜 - 品牌鉴赏师
  • LeeCode_476 数字的补数
  • 51单片机_SPI
  • 2026国内最新爆款裤料品牌top10推荐!广东广州等地优质裤料供应商权威榜单发布,创新工艺与品质保障助力服饰产业升级 - 品牌推荐2026
  • 零成本搭建全球加速后端!Cloudflare Workers + 国内优化,小白也能30分钟搞定