数据库中:where子句与having子句的区别:
where:
① where是一个约束声明,使用where来约束来自数据库的数据;
② where是在结果返回之前起作用的;
③ where不能使用聚合函数(聚合函数包括:sum、count、max、avg等对一组或多条数据操作的函数);
④ where的执行顺序早于having;
having:
① having是一个过滤声明;
② 在查询结果以后,对查询结果进行的过滤操作;
③ having可以使用聚合函数(聚合函数包括:sum、count、max、avg等对一组或多条数据操作的函数);
④ having的执行顺序后于where;
聚合函数:
例如:sum、count、max、avg等对一组或多条数据操作的函数,在使用时需要配合group by来使用。
平均成绩以学号(sno)分成小组,属于同一个学号的为一组[group by sno]取其成绩的平均值[having avg(grade)],作为该学号(sno)的平均成绩。
上图为嵌套查询all (select avg(grade) from SC group by sno)以学号分组取其平均成绩,进而求其平均成绩的最大值;然后再以学号分组求最高平均成绩(即平均成绩最大值)学生的学号以及平均成绩。