题目
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 子句用于过滤聚合结果集
