📜  where 和 having 子句的区别 - SQL (1)

📅  最后修改于: 2023-12-03 14:48:27.123000             🧑  作者: Mango

Where和Having子句的区别

在SQL中,WHERE和HAVING子句都用于筛选数据,但是它们之间有一些关键的区别。在本文中,我们将深入研究这两个子句的区别以及它们的使用场景。

WHERE子句

WHERE用于在SELECT语句中筛选行。它用于过滤基于列值的特定行,并且只返回符合条件的行。

语法
SELECT column1, column2, ...
FROM table_name
WHERE condition;
例子

假设我们有一个名为students的表,其中包含学生的ID、姓名和成绩。下面是一个示例查询,它使用WHERE子句来检索所有成绩大于等于60分的学生记录:

SELECT * FROM students
WHERE score >= 60;
HAVING子句

HAVING用于在GROUP BY子句中筛选列。它用于过滤基于聚合函数计算出的结果集并只返回符合条件的记录。

语法
SELECT column1, column2, ...
FROM table_name
GROUP BY column1, column2, ...
HAVING condition;
例子

假设我们有一个名为students的表,其中包含学生的ID、姓名和成绩。下面是一个示例查询,它使用HAVING子句来检索所有成绩平均分大于等于60分的学生记录:

SELECT AVG(score) AS avg_score
FROM students
GROUP BY student_name
HAVING avg_score >= 60;
区别

下面是WHERE和HAVING子句之间的主要区别:

  • WHERE在所有记录上运行,而HAVING仅在分组记录上运行。
  • WHERE过滤行,HAVING过滤组。
  • 在执行GROUP BY时,WHERE子句必须位于GROUP BY子句之前,而HAVING子句必须位于GROUP BY子句之后。
总结

WHERE和HAVING子句虽然都可以用于筛选数据,但是它们之间有很大的区别。WHERE用于过滤行,而HAVING用于过滤组。在使用GROUP BY子句时,WHERE和HAVING子句的位置也需要注意。