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

MySQL——SQL执行顺序

SQL执行顺序

    • 一、标准执行顺序
      • 1. FROM / JOIN / ON
      • 2. WHERE
      • 3. GROUP BY
      • 4. HAVING
      • 5. SELECT
      • 6. DISTINCT
      • 7. ORDER BY
      • 8. LIMIT
    • 三、 SQL 完整演示执行顺序
    • 四、最容易踩的 3 个坑(必须记住)
      • 坑1:WHERE 里不能用 SELECT 的别名
      • 坑2:WHERE 不能用聚合函数
      • 坑3:HAVING 必须跟 GROUP BY
      • 总结(最核心 3 条)

一、标准执行顺序

FROM/JOIN/ONWHEREGROUPBYHAVINGSELECTDISTINCTORDERBYLIMIT

1. FROM / JOIN / ON

第一步:先找表!

  • 确定从哪张表取数据
  • 多表关联先拼接成一张大临时表

没有这一步,后面所有条件都无从谈起。


2. WHERE

第二步:过滤行!

  • 从大表里删掉不符合条件的数据
  • 对单条记录筛选
  • 不能用聚合函数(SUM/COUNT/AVG)

WHERE 越早过滤,后面计算越快。


3. GROUP BY

第三步:分组!

  • 把数据按字段分组(如按班级、性别分组)
  • 分组后,一行代表一组

4. HAVING

第四步:过滤分组!

  • 分组后的结果筛选
  • 可以用聚合函数
  • 必须在 GROUP BY 之后

WHERE 过滤行
HAVING 过滤组


5. SELECT

第五步:查要显示的列!

  • 最后才计算你要查的字段
  • 计算别名、表达式、函数
  • 聚合函数(SUM/COUNT)在这里执行

⚠️ 重点:WHERE 中不能用 SELECT 里的别名
因为 WHERE 比 SELECT 先执行!


6. DISTINCT

第六步:去重!

  • 对查询结果去掉重复行
  • 在 SELECT 之后执行

7. ORDER BY

第七步:排序!

  • 对最终结果排序
  • 可以用别名
  • 执行非常靠后

8. LIMIT

第八步:截取前几条!

  • 最后一步,只返回你要的行数

三、 SQL 完整演示执行顺序

你写的 SQL:

SELECTclass_name,COUNT(*)ASnumFROMstudentWHEREage>18GROUPBYclass_nameHAVINGnum>10ORDERBYnumDESCLIMIT5;

真正执行顺序:

  1. FROM student 找到表
  2. WHERE age>18 过滤年龄
  3. GROUP BY class_name 按班级分组
  4. HAVING num>10 只保留人数>10的班级
  5. SELECT 计算班级名和数量
  6. ORDER BY 排序
  7. LIMIT 取前5

四、最容易踩的 3 个坑(必须记住)

坑1:WHERE 里不能用 SELECT 的别名

-- 错误SELECTnameASnFROMstudentWHEREn='张三'

原因:WHERE 比 SELECT 先执行,根本不知道 n 是什么。


坑2:WHERE 不能用聚合函数

-- 错误SELECTCOUNT(*)FROMstudentWHERECOUNT(*)>10

正确写法:

SELECTCOUNT(*)FROMstudentGROUPBYclassHAVINGCOUNT(*)>10

坑3:HAVING 必须跟 GROUP BY

没有分组,就不能用 HAVING。


总结(最核心 3 条)

  1. FROM 最先执行
  2. WHERE 在 GROUP BY 前面
  3. SELECT 在 HAVING 之后、ORDER BY 之前
http://www.jsqmd.com/news/605698/

相关文章:

  • UE4数字孪生中的天气与交通实时模拟:高德API+VaRest插件实战教程
  • 2026南京食品销售许可证办理优质机构推荐:南京代账公司、南京保安许可证办理、南京农药兽药许可证办理、南京增值电信许可证办理选择指南 - 优质品牌商家
  • 求助,有没有大佬知道怎么把权限打开,在开发者后台相关权限我都打开了但是还是没用
  • 2026年质量好的宁波IP67防水防尘防护箱/户外设备防护箱/救援工具防护箱/宁波防护箱公司对比推荐 - 行业平台推荐
  • 在WinForms里用OpenTK+SkiaSharp画个会动的波形图(.NET 8环境保姆级教程)
  • 「爬取豆瓣电影数据:我是如何被反爬虫机制暴打的」
  • 避开大坑:OpenClaw对接Phi-3-vision-128k-instruct常见配置错误排查
  • 2026年价格低的工地临建打包箱/快拼打包箱/包头折叠打包箱精选厂家推荐 - 行业平台推荐
  • Python开发必看:5个高频实用技巧,提升编码效率(附完整代码)
  • OpenClaw学习曲线分析:Qwen3.5-9B在不同复杂度任务中的表现
  • Karpathy LLM Knowledge Base 体验及教程分享
  • 网络安全自动化利器:OpenClaw调用SecGPT-14B完成漏洞扫描
  • 2026交通标志杆件及标牌供应商推荐指南:铝板交通标志牌/高强级反光膜/高速公路标志牌/三类反光膜/二类反光膜/选择指南 - 优质品牌商家
  • 侧信道攻击防御指南:从智能家居到云服务器的7个关键防护措施
  • 2026论文AI率检测合格标准是多少?顽固超标怎么快速处理
  • MySQL Binlog配置优化全攻略
  • qt日常积累
  • Multi-Agent 生产环境SLA设计:延迟≤200ms+成功率≥99.9%的实现
  • GD32F4实战:在FreeRTOS上跑通LWIP,搞定网线热插拔的完整配置流程
  • 【seatunnel-web】Linux部署实战:从零到一构建数据同步管理平台
  • 2026年靠谱的工厂食堂承包/学校食堂承包可靠服务公司 - 行业平台推荐
  • Cookie、Session、Token 详细讲解
  • TJA1145芯片手册解读:汽车CAN FD网络中的低功耗与选择性唤醒设计
  • mysql 根据时间字段判断改变数据状态(定时任务)
  • 2026年水质第三方检测技术分享:检测机构实验室、水质检测、环境第三方检测、肥料检测、食品第三方检测、饲料检测选择指南 - 优质品牌商家
  • 人工智能|大模型——模型——混合专家网络架构详解(MoE)!
  • OpenClaw调用百川2-13B量化模型:低成本自动化内容生成方案
  • 如何用Synonyms实现智能问答系统:面向初学者的完整指南
  • 极简神经网络调参入门(1):单神经元单输入梯度下降调参
  • 编程新手必看:C语言基础全解析