在SQL SELECT语句中,HAVING和WHERE的区别是什么?
编辑:我已经把Steven的答案标记为正确答案,因为它包含了链接上的关键信息:
当GROUP BY没有被使用时,HAVING就像一个WHERE子句
我在WHERE中看到的情况没有GROUP BY,这就是我的困惑开始的地方。当然,在你知道这一点之前,你不能在问题中指定它。
在SQL SELECT语句中,HAVING和WHERE的区别是什么?
编辑:我已经把Steven的答案标记为正确答案,因为它包含了链接上的关键信息:
当GROUP BY没有被使用时,HAVING就像一个WHERE子句
我在WHERE中看到的情况没有GROUP BY,这就是我的困惑开始的地方。当然,在你知道这一点之前,你不能在问题中指定它。
当前回答
WHERE用于对SQL返回的集合进行限制;它使用SQL内置的集合操作和索引,因此是过滤结果集的最快方式。尽可能使用WHERE。
have对于某些聚合过滤器是必要的。它在sql检索、组装和排序结果之后过滤查询。因此,它比WHERE慢得多,应该避免,除非在需要它的情况下。
SQL Server将允许您使用HAVING,即使WHERE更快。不要这样做。
其他回答
我遇到了一个问题,并发现了WHERE和HAVING之间的另一个区别。它对索引列的作用不同。
WHERE my_indexed_row = 123将显示行,并自动对其他索引行执行“ORDER ASC”。
HAVING my_indexed_row = 123显示从最老的“插入”行到最新的行,没有顺序。
的搜索条件 group或在SELECT语句中使用的聚合函数。
源
当GROUP BY不使用时,WHERE和HAVING子句本质上是等价的。
然而,当使用GROUP BY时:
WHERE子句用于从结果中筛选记录。的 在进行任何分组之前进行筛选。 HAVING从句是 用于从一个组中过滤值(即,检查后的条件 已经执行了分组聚合)。
WHERE和HAVING子句的区别:
WHERE子句和HAVING子句之间的主要区别是,WHERE用于行操作,HAVING用于列操作。
为什么我们需要HAVING从句?
我们知道,聚合函数只能在列上执行,所以不能在WHERE子句中使用聚合函数。因此,我们在HAVING子句中使用聚合函数。
在聚合查询中(使用聚合函数的任何查询),Where子句中的谓词在生成聚合中间结果集之前求值,
Having子句中的谓词在聚合结果集生成后应用于聚合结果集。这就是为什么聚合值的谓词条件必须放在Having子句中,而不是放在Where子句中,以及为什么可以在Having子句中使用Select子句中定义的别名,而不能在Where子句中使用。