题目
where 和 having 的区别
答案
WHERE 子句和 HAVING 子句都是用于过滤查询结果的,但是它们的作用域和使用方式有所不同。 WHERE 子句是在**查询数据之前**对数据进行过滤的,用于限制返回的行必须满足指定的条件。它可以用来过滤列值、日期范围、多个列的组合等。 例如,下面的 SQL 查询使用 WHERE 子句来过滤订单表中价格大于 100 的所有订单: ```sql Copy code SELECT * FROM orders WHERE price > 100; ``` 而 HAVING 子句是在**查询数据之后**对数据进行过滤的,用于过滤基于聚合函数计算出来的结果。它必须与 `GROUP BY` 子句一起使用,用于过滤聚合结果集。在 HAVING 子句中可以使用聚合函数和 GROUP BY 子句中的列。 例如,下面的 SQL 查询使用 HAVING 子句来过滤商品表中每种商品销售数量大于 100 的商品: ```sql SELECT product_name, SUM(quantity) AS total_quantity FROM sales GROUP BY product_name HAVING SUM(quantity) > 100; ``` 总的来说,WHERE 子句用于过滤行,HAVING 子句用于过滤聚合结果集