SQL中HAVING和WHERE子句的区别

时间:2011-09-12 06:05:41

标签: sql where-clause having-clause

SELECT column_name, aggregate_function(column_name) 
FROM table_name 
WHERE column_name operator value 
GROUP BY column_name 
HAVING aggregate_function(column_name) operator value

有和哪里有什么区别

2 个答案:

答案 0 :(得分:8)

<{1}}

上的

where过滤器

select ... from过滤了having

的汇总结果

所以,再看一遍你的例子:

group by ...

此处,SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name HAVING aggregate_function(column_name) operator value 表示“返回table_name所在的结果 'column_name operator value'为true“。

只有在找到这些条件的所有结果后,才按列名分组。

然后WHERE column_name operator value说“对于生成的聚合组,运行'aggregate_function(column_name)'并仅返回'aggregate_function(column_name)运算符值'为真的结果。”

答案 1 :(得分:7)

  1. WHERE子句可以与SELECT,INSERT,DELETE等语句一起使用,但是HAVING子句只能用于 SELECT语句。
  2. HAVING子句只能与GROUP BY子句一起使用
  3. 在WHERE子句中,我们不能直接使用任何agregate函数