where子句与having短语的区别在于作用的对象不同
where:
- 作用于基本表或者是试图
- 表示的是个体存在的条件
- 是分组统计前对个体进行的筛选
- where不能使用聚集函数
having:
- 是对于分组以后对统计量进行的判断条件
- 作用于组,从中选择满足条件的组
- having可以使用聚集函数
用比较形象的解释来说就是,当全校的学生在操场上你需要将人聚集你的面前,当你叫全体男生来到主席台面前是你需要用的是where sex = '男' 这样全体男生被你筛选过来了,当你要全体师生分为各个系的平均分大于90的人来到主席台时你就需要让所有人找到自己所在的系里面,完成分组后再从每个组里面找到平均分大于90的人出来
select S_name,AVG(Grade)
from student
group by Sdept /*将学生分为每个系别*/
having AVG(Grade); /*每个系的平均分大于90的学生*/
where与having的执行顺序:
where > group by > having
select S_name,AVG(Grade)
from student
where S_sex = '男'
group by Sdept /*将学生分为每个系别*/
having AVG(Grade); /*每个系的男生平均分大于90的学生*/