SQL 中 WHERE 和 HAVING 的区别

WHERE

  • 是一个约束声明,用于约束来自数据库的数据(即在调用相关数据的时候,这些数据已经被过滤了一部分)
  • 是在返回结果之前起作用的
  • 后面不能跟 聚合函数,因为 WHERE 是对逐条记录进行筛选,聚合后就无法实现功能

HAVING

  • 是一个过滤声明,
  • 返回结果集之后,对结果集进行过滤,以显示过滤后的结果
  • 后面可以跟聚合函数

书写顺序

SELECT[DISTINCT]
FROM
JOIN(如LEFT JOIN)
ON
WHERE
GROUP BY
HAVING
UNION
ORDER BY
LIMIT


常见的聚合函数有:count(), sum(), min(), max(), avg()
其中,min(), max() 还可以对字符串进行操作
聚合函数常配合group by 使用
当select的内容不仅包含 聚合函数列,还包含其他列时,必须使用grou by 函数。
如 : select id, max(score) from t1 group by id;


在使用avg(col1) 时,如果col1 中有 null 值,该行会被忽略。
如果想要把null当做0,那么可以使用IsNull函数,语法如下:
avg(IsNull(col1,0))


原文地址:https://www.cnblogs.com/talented/p/14840601.html