sqlserver2008中Where和Having子句的区别

在本文中,我将介绍WHERE子句和Having子句之间的主要区别。
大多数时候,我们会混淆WHERE子句和Having子句。Having子句和Where子句都过滤来自Select语句的数据,但它们仍然是不同的。我们可以据此区分的主要情景解释如下:

情况1

Having只能在SELECT语句中使用,但WHERE 子句和SELECT,UPDATE和DELETE语句一起使用。

Where 子句

UPDATE employee SET salary=15000
WHERE id=3

Having 子句

UPDATE employee SET salary=15000
Having id=3

Having 子句 将报语法错误

情况2

Having子句用于过滤组,而 WHERE 子句用于过滤行。

情况3

大多数时候 WHERE 或者 Have 子句给出相同的结果。 下面给出的两个 SQL 语句给出了相同的结果。 假设我想要按 DeapartmentID 分组的用户。 为此,请使用 GROUP BY 子句来构建聚合查询。

WHERE 子句

select count(*),DeapartmentID from users
where DeapartmentID in (2,3)
group by DeapartmentID

Having子句

select count(*),DeapartmentID from users
group by DeapartmentID
having DeapartmentID in(2,3)

WHERE 子句用于获取特定记录,该子句在 select 语句之后应用,而 Hading 子句用于按功能组合分组。 Have 子句通常用于 GROUP BY 子句中,如果不使用 GROUP BY 函数,则不能编写 have 子句。

Have 子句仅适用于同时出现在 Group by 子句或者聚合函数中的列。

Where子句在数据分组之前应用,而Having子句在数据结果分组之后指定。

日期:2020-06-02 22:18:13 来源:oir作者:oir