什么是需要WHERE和HAVING子句的查询示例?

时间:2014-11-12 21:34:49

标签: sql-server tsql

我不是在问这两个条款之间有什么区别。我知道WHERE子句在表中的行内搜索,并且HAVING子句在select语句中分组的项目中搜索。

示例:

SELECT x, Count(*) FROM table WHERE x IS NOT NULL GROUP BY x HAVING Count(*) > 1 ORDER BY x

返回与

相同的内容

SELECT x, Count(*) FROM table GROUP BY x HAVING x <> NULL AND Count(*) > 1 ORDER BY x

HAVING子句是否可以在每次没有WHERE子句时返回相同的结果,例如在本例中,还是有时间需要WHERE子句?或者这仅仅是效率问题?

2 个答案:

答案 0 :(得分:1)

在您的第一个查询中,WHERE x IS NOT NULL过滤掉列x具有空值的所有行,然后执行分组。

然而,在第二个查询中,您首先执行分组,然后应用相同的过滤器。

我更喜欢第一个,过滤掉不需要的行,然后执行分组。

答案 1 :(得分:1)

在分组完成之前,您可以使用where子句按表中的任何列进行过滤。例如。

SELECT  x, COUNT()
FROM    table
WHERE   y IS NOT NULL
GROUP BY x HAVING COUNT() > 1
ORDER BY x

所以答案绝对是肯定的,你有时需要where子句。正如Rahul指出的那样,即使在你的例子中,我也更喜欢带有where子句的那个。