MySQL SELECT语句执行顺序
参考资料:
SELECT语句执行顺序
- FROM : 从右往左,组装来自不同数据源的数据(包括ON JOIN)
- WHERE : 基于指定的条件对记录行进行筛选,从右往左
- GROUP BY : 根据字段划分为多个分组;分组后除聚集函数进行计算,或者分组字段,其余均返回第一行数据
- 使用聚集函数进行计算 : 计算select 后面或者 having 后面的聚焦函数
- HAVING : 分组后还要进行筛选 那么就需要having语句(必须有GROUP BY)
- 计算所有的表达式 :
- SELECT :包括 DISTINCT 去重,窗口函数执行
- UNION :合并表数据
- ORDER BY :排序
- LIMIT :限制返回记录
关于 HAVING
HAVING主要是对聚合后对组记录进行筛选。所以在使用HAVING时,相关的计算(step4)已经完成,简单的来说就是 把 GROUP BY 聚合后的结果作为 HAVING 子句的起点, 所以 HAVING 适用的字段如下:
- 常量
- 聚合函数
- 聚合键(GROUP BY 字段)
- SELECT 出现的字段
HAVING 和 WHERE 的区别
1. HAVING 不能使用 SELECT 和 FROM 之间没有列出的字段,而 WHERE 不能使用select后写的常量的别名(但是 HAVING 却可以),换言之 WHERE 只可以使用常量和表中的数据
2. WHERE不能使用聚集函数,因为 聚集函数计算 是在 GROUP BY 之后执行
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性