sql执行顺序及where和having的区别
Where 是一个约束声明,使用Where约束来自数据库的数据,Where是在结果返回之前起作用的,Where中不能使用聚合函数。
Having 是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作,在Having中可以使用聚合函数。
在查询过程中聚合语句(sum,min,max,avg,count)要比having子句优先执行。而where子句在查询过程中执行优先级高于聚合语句。
1.解释如下,sql语句的执行过程是:from-->where-->group by -->having --> select--- >order by;
2.聚合函数是针对结果集进行的,但是where条件并不是在查询出结果集之后运行,所以主函数放在where语句中,会出现错误;
而having不一样,having是针对结果集做筛选的,所以我门一般吧组函数放在having中,用having来代替where,having一般跟在group by后
————————————————
3.语法上有个执行先后的差别,先执行where后执行having
4.功能上有个筛选的区别,where只能筛选记录行,不能筛选聚合后的记录行,having主要用来筛选分组聚合后的结果集。
————————————————
转自:https://blog.csdn.net/baidu_20876831/article/details/115323427
![](https://common.cnblogs.com/images/loading.gif)