where VS having
where 和 having 的区别:
WHERE 子句不能包含聚集函数; 因为试图用聚集函数判断那些行输入给聚集运算是没有意义的。相反,HAVING 子句总是包含聚集函数
having一般跟在group by之后,执行记录组选择的一部分来工作的。
where则是执行所有数据来工作的。再者having可以用聚合函数,如having sum(qty)>1000
1.用的地方不一样
where可以用于select、update、delete和insert...into语句中。
having只能用于select语句中
2.执行的顺序不一样
where的搜索条件是在执行语句进行分组之前应用
having的搜索条件是在分组条件后执行的
即如果where和having一起用时,where会先执行,having后执行
3.子句有区别
where子句 中的条件表达式having都可以跟,而having子句中的有些表达式where不可以跟;having子句可以用集合函数(sum、count、avg、max和min),而where子句不可以。
4.作用的对象不同
WHERE 子句作用于表和视图,HAVING 子句作用于组。