这篇文章主要给大家详细介绍了MySQL中having和where的区别以及他们的使用方法,文中有相关的代码示例,具有一定的参考价值,需要的朋友可以参考下
−
目录
- having 和 where 区别
- having 和 where 应用
- 总结:
having 和 where 区别
- having是对一个表的数据进行分组之后,对组信息进行相应条件筛选
- having筛选时,只能根据select子句中可出现的字段(数据)来进行条件设定
- having子句与where子句一样,都是用于条件判断
- where是判断数据从磁盘读入内存的时候
- having是判断分组统计之前的所有条件
- having子句中可以使用字段别名,而where不能使用
- having能够使用统计函数,而where不能使用
having 和 where 应用
在 MySQL 中,HAVING 和 WHERE 是用于筛选数据的两个关键字,它们有以下区别和用法:
用途:
WHERE:WHERE子句用于在执行查询之前筛选行。它可用于过滤SELECT、UPDATE、DELETE语句中的行,根据指定的条件选择要操作的数据行。HAVING:HAVING子句用于在执行聚合查询后筛选结果集。它仅能在包含聚合函数(如SUM、COUNT、AVG等)的SELECT语句中使用,并在查询结果进行聚合操作后,对聚合结果进行筛选。
位置:
WHERE:WHERE子句通常出现在SELECT、UPDATE、DELETE语句的FROM子句之后、GROUP BY子句之前。HAVING:HAVING子句通常出现在GROUP BY子句之后、ORDER BY子句之前。
过滤条件:
WHERE:WHERE子句用于指定过滤条件,其中可以使用比较操作符(如=,<>,<,>,BETWEEN,IN等)和逻辑操作符(如AND,OR,NOT)。HAVING:HAVING子句用于指定对聚合结果的过滤条件,其中可以使用比较操作符和逻辑操作符,也可以使用聚合函数。
示例: 假设有一个名为 orders 的表,其中包含 customer_id(客户ID)和 total_price(总价格)字段。我们希望查找每个客户的总价格大于 100 的订单。
使用 WHERE 子句的示例:
| 1 2 3 4 5 |
|
使用 HAVING 子句的示例:
| 1 2 3 4 5 |
|
在上述示例中,WHERE 子句无法直接使用聚合函数,因此我们使用 GROUP BY 子句将结果按客户ID分组,并在 HAVING 子句中筛选出总价格大于 100 的订单。
总结:
WHERE子句用于在执行查询之前筛选行,而HAVING子句用于在执行聚合查询后筛选结果集。WHERE出现在FROM子句之后,GROUP BY子句之前;而HAVING出现在GROUP BY子句之后、ORDER BY子句之前。WHERE可以使用比较操作符和逻辑操作符来指定过滤条件,而HAVING不仅可以使用比较操作符和逻辑操作符,还可以使用聚合函数。