-
where
1)where是一个约束声明,使用where来约束来自数据库的数据
2)where是在结果返回之前 起作用的
3)where中不可以使用聚合函数
4)where作用于记录(作用对象不同) -
having
1)having是一个过滤声明
2)having是在查询返回结果集后 对查询结果的过滤操作
3)having中可以使用聚合函数
4)having作用于组
在了解where和having的区别之前,需要先了解GROUP BY这个子句,而了解这个子句,又需要先了解 聚合函数
-
聚合函数
SQL语言的一种特殊的函数,如SUM, COUNT, MAX, AVG等。这些函数与其他函数的区别在于它们作用在多条记录上。如:
SELECT SUM(id) FROM student;
其中SUM作用在所有返回记录 的id字段上。 -
GROUP BY
通过使用该子句,可以让聚合函数对属于一组的数据起作用。
在select指定的字段要么就要包含在Group By语句的后面,作为分组的依据;要么就要被包含在聚合函数中。如以下情况,会导致sid失效:
SELECT sid, cid, MAX(score) FROM stu_course GROUP BY cid;
-
having与where区别
having聚合后对组记录进行筛选
where在聚合前先筛选记录
(即,where作用在GROUP BY子句和having子句前)
此外,想要排序的话可以在最后加 order by sum(id) desc/asc
学习链接:
https://www.jianshu.com/p/fbf5d6376f9d (where与having的区别)
https://www.yanxurui.cc/posts/mysql/2016-11-10-10-sql-interview-questions/ (包含重要的sql语句)
https://www.cnblogs.com/jingfengling/p/5962182.html (group by查询字段问题)