having是先分组再筛选记录,where在聚合前先筛选记录.也就是说作用在group by 子句和having子句前;而 having子句在聚合后对组记录进行筛选。
作用的对象不同。where 子句作用于表和视图,having 子句作用于组。where 在分组和聚集计算之前选取输入行(因此,它控制哪些行进入聚集计算), 而 having 在分组和聚集之后选取分组的行。因此,where 子句不能包含聚集函数; 因为试图用聚集函数判断那些行输入给聚集运算是没有意义的。 相反,having 子句总是包含聚集函数。(严格说来,你可以写不使用聚集的 having 子句, 但这样做只是白费劲。同样的条件可以更有效地用于 where 阶段。)比如说:
select * from tablename where id > 1; 和
select * from tablename having id > 1
这两者是查询结果是没有区别的。不建议使用having
总结就两句话:
where语句在groupby语句之前;sql会在分组之前计算where语句。
having语句在groupby语句之后;sql会在分组之后计算having语句。
编辑推荐:
- 了解sql语句中where和having的区别02-28
- MySQL数据库优化的简单方法02-28
- 解析mysql数据库设计技巧02-28
- 解析MySQL高速缓存启动方法及参数(query_cache_size)02-28
- 详解mysql慢查询02-28
- 了解mysql中select语句操作实例02-28
- MySQL索引什么情况下创建02-28
- 解析mysql中insert的操作02-28
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
