【20220216每日面经】SQL语句中where与 having的区别

每日面经

  • 考察点:数据库

  • 难度:简单

  • 题目: 如果你在面试过程中,被面试官问到:请谈谈SQL语句中where与having的区别,你会如何回答呢?

ps:每周一公布上周所有题目答案

简单来说,WHERE用于筛选整个表中的记录,HAVING用于筛选聚合函数(如COUNT, SUM, AVG)筛选分组后的记录。
存在以下几点差异:
1.一般情况下,WHERE 用于过滤数据行,而 HAVING 用于过滤分组。
2.WHERE 查询条件中不可以使用聚合函数,而 HAVING 查询条件中可以使用聚合函数。
3.WHERE 在数据分组前进行过滤,而 HAVING 在数据分组后进行过滤 。
4.WHERE 针对数据库文件进行过滤,而 HAVING 针对查询结果进行过滤。也就是说,WHERE 根据数据表中的字段直接进行过滤,而 HAVING 是根据前面已经查询出的字段进行过滤。
5.WHERE 查询条件中不可以使用字段别名,而 HAVING 查询条件中可以使用字段别名。

在 SQL 查询中,WHERE 和 HAVING 都是用于筛选数据的关键字,但它们的使用场景和作用不同。

  1. WHERE

WHERE 关键字通常用于在查询语句中对行进行筛选,用于筛选符合特定条件的行。它通常用于过滤基础数据,例如:

SELECT * FROM teachers
WHERE city = '深圳';

在这个例子中,WHERE 子句用于仅返回居住在深圳的讲师的行记录。

  1. HAVING

HAVING 关键字通常用于在 GROUP BY 子句中对聚合函数进行筛选。它用于在查询返回之后,对返回的数据进行筛选,

例如:

SELECT city, COUNT(*) as count
FROM teachers
GROUP BY city
HAVING COUNT(*) > 10;

在这个例子中,HAVING 子句用于仅返回拥有超过 10 名讲师的城市。

在总体上,WHERE 和 HAVING 都是用于筛选数据的关键字,但它们的使用场景和作用不同。WHERE 用于过滤基础数据,HAVING 用于对聚合函数进行筛选。