having和where都为设定条件筛选得语句,但在我们日常学习和生活中经常分不清该怎么去运用having和where
having和where的区别:
having语句在mysql中通常在group by(分组函数)和聚合函数(sum,min,max,avg,count)后的数据进行筛选
where语句在group by 前的分组函数和聚合函数进行筛选
where语句字句中无法使用聚合函数
例如:在查找 学生类中,有点两名学生以上大于八十分的寝室时讲聚合语句写在where后面就会报错
但将count(*)>2写在having后就解决这一系列的问题
因为where的执行顺序要比聚合语句快,所以在没有执行到聚合语句时where就已经执行结束,无法判断聚合语句后的条件,having 的出现就是弥补where的缺陷让在执行过后的聚合语句后的数据也可以参与判断;
所以在写sql判断筛选的语句的同时,要考虑在执行过程中的先后顺序:from>where>group=(聚合)>having
总结:having语句可以在聚合后对组记录进行筛选,而where子句在聚合前先筛选记录,也就是说作用在group by 子句和having子句前。