where和having对比

一、where和having使用对比:

where后面接的字段,要是数据表中有的字段;

having后面接的字段,要是select查询出来的字段,可以是聚合函数;

如果字段在数据表中有,且select出来了,则where和having都可以用;

 

1. where和having都可以使用的场景

1)select addtime,name from dw_users where addtime> 1500000000

2)select addtime,name from dw_users having addtime> 1500000000

2. 只可以用where,不可以用having的情况

1) select addtime,name from dw_users where addtime> 1500000000

2) select phone,name from dw_users having addtime> 1500000000 //报错!!!因为前面并没有筛选出addtime字段

3. 只可以用having,不可以用where情况

1)select category_id , avg(price) as ag from dw_goods group by goods_category having ag > 100

2)select category_id , avg(price) as ag from dw_goods where ag>100 group by goods_category //报错!!因为from dw_goods 这张数据表里面没有ag这个字段

 

二、where、having、group by 使用解析

where是在分组之前进行筛选;

having是在分组之后进行筛选;

当同时含有 where 子句、group by 子句 、having 子句及聚集函数时,执行顺序如下:

执行where子句查找符合条件的数据;

使用group by 子句对数据进行分组;对group by 子句形成的组运行聚集函数计算每一组的值;

最后用having 子句去掉不符合条件的组

 

posted @ 2020-04-28 16:18  pikaqiu1989122  阅读(404)  评论(0)    收藏  举报