2022-01-19
阅读量:
788
MYSQL语句执行顺序之:having与where的使用区别、具体使用场景
目录:
1、having与where是什么?二者有什么区别?(理论层->)
2、having与where的使用场景(实操层->)
正文:
1、having与where是什么?二者有什么区别? 》》》概念层 Where 是一个约束声明,用于约束来自数据库的数据,是在分组前对数据进行过滤(结果返回之前起作用),Where不能使用聚合函数。 Having是一个过滤声明,是在在分组后对数据进行过滤(查询返回结果集以后对查询结果进行的过滤操作),在Having中可以使用聚合函数。 作用的对象不同。WHERE 子句作用于表和视图,HAVING 子句作用于组。 》》》在查询过程中: 聚合语句(sum,min,max,avg,count)要比having子句优先执行; 而where子句在查询过程中执行优先级高于聚合语句。 》》》在查询过程中执行顺序: from>where>group(含聚合)>having>order>select 2、having与where的使用场景 (1)where和having都可以使用(但含义不同) 使用where:select goods_price,goods_name from sw_goods where goods_price > 100 使用having:select goods_price,goods_name from sw_goods having goods_price > 100 (2)只可以用where,不可以用having 使用where:select goods_name,goods_number from sw_goods where goods_price > 100 使用having:select goods_name,goods_number from sw_goods having goods_price > 100 (使用having报错!!!因为前面并没有筛选出goods_price 字段) 区别: having是对select筛选的字段再筛选,如果前面没有select goods_price 就会报错!! 而where是从数据表中的字段直接进行的筛选,如果前面没有select goods_price 不会报错!! (3)只可以用having,不可以用where 使用where:select goods_category_id , avg(goods_price) as ag from sw_goods group by goods_category ag>1000 (如果按照SQL语句的执行顺序,原理上是会报错的,但在SQL5.7版本之后的是可以执行的,不过建议在实际操作中不要使用别名,有的数据库可能无法执行) 使用having: select goods_category_id,avg(goods_price) as ag from sw_goods ag>1000 group by goods_category (报错!!因为from sw_goods 这张数据表里面原先没有ag这个字段,where是在select之前对字段进行条件约束)
151.7264
9
0
关注作者
收藏
评论(0)
发表评论
暂无数据
推荐帖子
1条评论
0条评论