SQL中的HAVING和WHERE子句差异

时间:2018-09-26 11:43:53

标签: sql where having

正如我到处阅读的内容,HAVING子句和WHERE子句执行某种类似的功能,但是WHERE子句条件在分组之前适用,而HAVING在之后分组。这到底是什么意思?如果我不事先将它们分组怎么办?我能得到相同的结果吗?

1 个答案:

答案 0 :(得分:0)

大多数数据库在没有having的情况下并不真正支持group by。因此,两者之间的区别确实很简单。您可以在having中使用聚合函数。它们会导致where中的语法错误。真的很简单。不能犯错误。

我猜您正在使用MySQL。该数据库扩展了having的使用。它允许它在非聚合查询中使用,这是非常不规范的。这样,它允许在条件中使用表别名。

因此会产生错误(假设x.foo不是列):

select x.col as foo
from x
where foo = 3;

但是,这在MySQL中是

select x.col as foo
from x
having foo = 3;

在其他数据库中,这将生成语法错误。

这很方便。在大多数数据库中,您将使用子查询(在MySQL中仍然可以执行)或CTE(在MySQL 8.0中现已允许)。