CDA117513

2022-01-19   阅读量: 421

SQL where having MYSQL

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之前对字段进行条件约束)
添加CDA认证专家【维克多阿涛】,微信号:【cdashijiazhuang】,提供数据分析指导及CDA考试秘籍。已助千人通过CDA数字化人才认证。欢迎交流,共同成长!
151.7264 9 0 关注作者 收藏

评论(0)


暂无数据

推荐课程