where 与having的区别

一、where子句不能有聚合函数,having子句可以有聚合函数

SELECT MAX(Grade)  最高分,MIN(Grade) 最低分 FROM SC WHERE Cno = 'C001'  --查询C001课程的最高分和最低分

SELECT Sno 学号, COUNT(*) 选课门数,AVG(Grade) 平均成绩 From SC Group BY Sno HAVING COUNT(*) > 3   ----查询选课门数超过3门的学生的学号和选课门数

二、分组子句跟在WHERE子句的后面

 例子:查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。
select Cno,AVG(Degree) as '平均分' from Score group by Cno having COUNT(Cno)>=5 and Cno like'3%'
select avg(degree)  from score where cno like'3%' group by cno having count(*)>=5

三、where的效率高过having

例子:查询计算机系和信息管理系每个系的学生人数
SELECT Dept,COUNT(*) FROM Student GROUP BY Dept Having Dept in  ('计算机系','信息管理系')
SELECT Dept,COUNT(*) FROM Student WHERE Dept in ('计算机系','信息管理系')  GROUP BY Dept

----第一种按照系分组好了之后,筛选所有系中的两个系,效率不高,第二种先进行WHERE筛选效率更高

四、备注

1、WHERE子句用于筛选FROM子句中指定的数据所产生的行数据。
2、GROUP BY 子句用于对经 WHERE 子句筛选后的结果数据进行分组。
3、HAVING 子句用于对分组后的统计结果再进行筛选。

猜你喜欢

转载自www.cnblogs.com/diandixingyun/p/12966373.html