WHERE与HAVING的区别?
时间: 2024-02-20 20:56:01 浏览: 50
WHERE 和 HAVING 都是 SQL 查询中用于过滤数据的关键字,但它们的作用范围不同:
1. WHERE 关键字用于在检索数据之前对行进行筛选,它作用于单个行中的列,并且只能使用与列有关的条件表达式。WHERE 子句筛选的行不参与分组计算,也不会出现在查询结果中。
2. HAVING 关键字用于在检索数据之后对分组进行筛选,它作用于组中的汇总值,并且只能使用与汇总值有关的条件表达式。HAVING 子句筛选的行是根据分组计算后的汇总值来进行筛选的,只有满足条件的组才会出现在查询结果中。
举个例子,假设我们有一个包含员工姓名、薪水和部门的表格,我们想要查询每个部门的平均薪水大于 5000 的部门名称和平均薪水。可以使用以下查询:
```
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 5000;
```
在这个查询中,GROUP BY 子句将数据按部门分组,然后使用 AVG 函数计算每个组的平均薪水。HAVING 子句筛选出平均薪水大于 5000 的组,最后查询结果中只包含部门名称和平均薪水两列。
如果我们使用 WHERE 子句来代替 HAVING 子句,查询语句如下:
```
SELECT department, AVG(salary) AS avg_salary
FROM employees
WHERE AVG(salary) > 5000
GROUP BY department;
```
这个查询将无法执行,因为 WHERE 子句不能使用 AVG 函数,只能使用与列有关的条件表达式。这也是 WHERE 和 HAVING 的主要区别:WHERE 用于筛选行,HAVING 用于筛选组。