where: 是一个约束声明,使用Where来约束来之数据库的数据,Where是在结果返回之前起作用的,且Where中不能使用聚合函数(例如SUM, COUNT, MAX, AVG等)
having:是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作,一定要和group by连用,在Having中可以使用聚合函数
例:查询总分大于250分的学生
如果不是用having使用where:
SELECT * FROM (SELECT g.student_name,SUM(g.score) sumscore FROM grade g GROUP BY g.student_name) t WHERE t.sumscore > 250
如果使用having
SELECT g.student_name,SUM(g.score) FROM grade g GROUP BY g.student_name HAVING SUM(g.score) > 250;