having 和 where 区别
1、用的地方不一样
where可以用在select update delete insert......into语句中
having只能用在select语句中
2、执行顺序不一样
where的搜索条件是在执行语句进行分组之前应用
having的搜索条件是在分组条件之后执行的
如果where和having同事出现在语句中时 也会先执行where后执行having
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
子句的示例:
SELECT customer_id, SUM(total_price) AS total
FROM orders
GROUP BY customer_id
HAVING total > 100;
使用 HAVING
子句的示例:
SELECT customer_id, SUM(total_price) AS total
FROM orders
GROUP BY customer_id
HAVING SUM(total_price) > 100;
在上述示例中,WHERE
子句无法直接使用聚合函数,因此我们使用 GROUP BY
子句将结果按客户ID分组,并在 HAVING
子句中筛选出总价格大于 100 的订单。
总结:
WHERE
子句用于在执行查询之前筛选行,而HAVING
子句用于在执行聚合查询后筛选结果集。WHERE
出现在FROM
子句之后,GROUP BY
子句之前;而HAVING
出现在GROUP BY
子句之后、ORDER BY
子句之前。WHERE
可以使用比较操作符和逻辑操作符来指定过滤条件,而HAVING
不仅可以使用比较操作符和逻辑操作符,还可以使用聚合函数。