sql中的having与where对比
💖The Begin💖点点关注,收藏不迷路💖
在SQL中,
having
和
where
都是用来过滤数据的,但它们之间存在一些关键的不同点。
1、语法差异
- **
where
**:在数据分组前过滤记录,只能使用表中的列名作为条件。selectcolumnfromtablewhere column_condition;
- **
having
**:通常与group by
一起使用,在数据分组后过滤聚合结果,可以使用聚合函数的结果作为条件。selectcolumn, aggregate(column)fromtablegroupbycolumnhaving aggregate_condition;
2、影响结果范围
- **
where
**:决定了从表中读取哪些行。 - **
having
**:决定了哪些分组的结果会返回给客户端。
3、索引使用
- **
where
**:可以直接利用索引来加速查询。 - **
having
**:不直接使用索引,但group by
可以利用索引,从而间接影响having
的效率。
4、聚合函数
- **
where
**:不能使用聚合函数进行过滤。 - **
having
**:专门用于基于聚合函数的结果进行过滤。
5、总结
- **
where
**:分组前过滤,基于列名,可用索引。 - **
having
**:分组后过滤,基于聚合结果,不直接用索引但受group by
影响。
💖The End💖点点关注,收藏不迷路💖
本文转载自: https://blog.csdn.net/qq_41840843/article/details/140794187
版权归原作者 Seal^_^ 所有, 如有侵权,请联系我们删除。
版权归原作者 Seal^_^ 所有, 如有侵权,请联系我们删除。