MySQL – HAVING vs WHERE


<!–

–>

MySQL – HAVING vs WHERE

在使用MySQL语言查询数据时,有两个关键字经常被用到:HAVING和WHERE。这两个关键字主要的作用是用来筛选数据,但是它们的使用方法和作用范围是不同的。在本文中,我们将通过丰富的示例来详细了解它们的使用方法和区别。

阅读更多:

WHERE

WHERE是一个用来过滤数据的关键字,它在查询语句中的位置通常在FROMGROUP BY之间。它用来选择满足指定条件的数据行。WHERE子句可以与各种运算符一起使用,例如等于(=)、大于(>)、小于(<)、不等于(!=)等。例如,我们可以使用WHERE子句来查询某个特定部门的数据:

(adsbygoogle = window.adsbygoogle || []).push({});

SELECT *
FROM employee
WHERE department = 'IT';

HAVING

HAVING也是一个用来过滤数据的关键字,它通常在GROUP BYORDER BY之间。与WHERE不同的是,HAVING可以对GROUP BY分组后的数据进行筛选。它可以与聚合函数一起使用,例如SUM、AVG等。例如,我们可以使用HAVING子句来查询销售总额大于10000的区域信息:

SELECT region, SUM(sales) as total_sales
FROM sales
GROUP BY region
HAVING total_sales > 10000;

HAVING vs WHERE

尽管HAVING和WHERE都用来筛选数据,但是它们的使用场景是不同的。WHERE是一个在分组前对数据行进行过滤的关键字,而HAVING是一个在分组后对分组进行过滤的关键字。它们的主要区别在于筛选的级别不同。另外,HAVING可以与聚合函数一起使用,而WHERE则不能使用聚合函数。

下面是一个示例来说明两个关键字的不同:

首先,我们使用WHERE关键字来过滤数据,该语句将会根据age列进行过滤:

SELECT name, age
FROM employee
WHERE age > 30;

接着,我们使用HAVING关键字来分组并计算平均年龄,再筛选出平均年龄大于30岁的部门:

SELECT department, AVG(age) as avg_age
FROM employee
GROUP BY department
HAVING avg_age > 30;

总结

本文详细介绍了MySQL中HAVING和WHERE两个关键字的使用方法和区别。虽然它们都可以用于筛选数据,但是WHERE是用来过滤数据行,而HAVING是用来筛选分组数据,即进行聚合运算后的数据。在SQL查询中,正确使用这两个关键字是非常重要的。

(adsbygoogle = window.adsbygoogle || []).push({});