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

MySQL SQL 执行顺序(理论顺序)

示例 SQL:

SELECT name, COUNT(*) 
FROM users 
WHERE age > 18 
GROUP BY name 
HAVING COUNT(*) > 1 
ORDER BY name ASC 
LIMIT 10;

虽然语句是从 SELECT 写起的,但执行顺序其实是这样的:

执行顺序SQL 子句作用说明
FROM确定查询的表、建立连接(JOIN)
ON用于连接条件(如果有 JOIN)
JOIN执行表连接操作(如果有)
WHERE行过滤,只保留符合条件的记录
GROUP BY分组操作
HAVING分组后的条件过滤
SELECT选择要查询的列或表达式
DISTINCT去重操作(如果指定)
ORDER BY排序操作
LIMIT限制返回结果的行数

📌 举例说明执行流程

SELECT department, COUNT(*) AS emp_count
FROM employees
WHERE salary > 5000
GROUP BY department
HAVING COUNT(*) > 2
ORDER BY emp_count DESC
LIMIT 5;

执行过程如下:

  1. FROM employees:确定数据源
  2. WHERE salary > 5000:筛选工资高于 5000 的员工
  3. GROUP BY department:按照部门分组
  4. HAVING COUNT(*) > 2:保留每组中人数超过 2 的部门
  5. SELECT department, COUNT(*):选择要显示的列
  6. ORDER BY emp_count DESC:按员工数倒序
  7. LIMIT 5:只取前 5 行

⚠️ 常见误区说明

  • WHERE 是在分组前过滤,HAVING 是在分组后过滤
  • SELECT 是在大多数逻辑完成后才进行,所以别名在 WHERE 中无法使用
  • LIMIT 是最后执行的,用于截取结果集

✅ 小技巧

需求应该使用
筛选原始记录WHERE
筛选分组结果HAVING
连接多表时的条件ON
排序字段来自聚合结果ORDER BY 中使用别名

可视化流程图

在这里插入图片描述

相关文章:

  • 若依微服务版启动小程序后端
  • 银河麒麟系统 达梦8 安装 dlask 框架后端环境
  • [图论]生成树 引言
  • Elasticsearch使用及常见的问题
  • 基于STM32的双摄联合识别系统
  • 阿里一面:Nacos配置中心交互模型是 push 还是 pull ?(原理+源码分析)
  • 4月16日
  • Next.js项目生成sitemap.xml站点地图
  • 楼宇自控系统如何为现代建筑打造安全、舒适、节能方案
  • 【Linux网络】网络基础概念深度解析
  • 【LeetCode基础算法】滑动窗口与双指针
  • OSPF路由协议
  • Python 注释进阶之Google风格
  • QML ListView:实现可拖拽排序的组件
  • GIS开发笔记(5)结合osg及osgEarth实现虚线环形区域绘制
  • 电脑知识 | TCP通俗易懂详解 <二>tcp首部
  • 微信小程序转为App实践篇 FinClip
  • 金融 IC 卡 CCRC 认证:从合规到业务安全的升级路径
  • asp-for等常用的HTML辅助标记?
  • 继承:(开始C++的进阶)
  • 北京网站建设比较好的公司/长沙seo全网营销
  • 网站推荐广告模板/怎样上百度做广告
  • dw怎么做鲜花网站/天津seo招聘
  • 企业网站建设带后台/建个网站费用多少
  • 典当行网站/seoyoon
  • 做网站哪里接单/淘宝怎么优化关键词步骤