You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL中能否用HAVING子句替代WHERE过滤id这类列?

MySQL中HAVING子句替代WHERE的场景说明

你提到的SELECT * FROM emp1 HAVING id = 1;确实能实现和WHERE id = 1相同的效果,但这属于非规范用法,原因如下:

  • 当SQL中没有指定GROUP BY子句时,MySQL会默认将整个表的数据视为单个分组,此时HAVING子句相当于对这个单分组的结果进行过滤,功能上和WHERE一致。
  • HAVING的设计初衷是配合GROUP BY,用来过滤经过聚合函数计算后的分组结果。直接用它替代WHERE会降低SQL的可读性,其他开发者看到这类写法时可能会困惑你的业务意图。
  • 性能层面,WHERE是在数据检索的早期阶段过滤不符合条件的行,能减少后续需要处理的数据量;而HAVING是在结果集生成后再做过滤,对于数据量较大的表,WHERE的执行效率通常更高。

两种写法对比:
规范写法(推荐):

SELECT * FROM emp1 WHERE id = 1;

你的测试写法:

SELECT * FROM emp1 HAVING id = 1;

内容的提问来源于stack exchange,提问作者Shreya Patil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 17:27:31