having和where的区别?

where 、having和on的区别都有一个共同点就是可以用来过滤数据

其次,在谈这些的区别的时候,我们首先要进行对SQL语言的执行顺序,做一个回忆:

SQL语言中的语法的顺序和执行的顺序是不一样的
    其语法的顺序是
        1、select(distinct)
        2、from
        3、where
        4、group by
        5、having
        6、union
        7、order by
    执行的顺序为:
        1、from
        2、where
        3、group by
        4、having
        5、select
        6、distinct
        7、union
        8、order by

有一个点:非常的重要就是,为什么不能够在where中使用select 中设定的别名的字段

        原因就是在select 在大部分语句执行完之后,也就是在from 、where、group by之后进行执行的:

从以上的区别之间就是可以看出

        where是在group by之前进行执行的,所以说是where之后就不能够使用聚合函数进行过滤数据的,只能够使用from表中的字段进行数据的过滤

其主要的原因就是在于:聚合函数是基于列进行计算的,而where子句就是对数据进行行过滤的,在赛选的过程中,依赖于已经赛选完的数据的出的一种结果是一种悖论。

        而having是在group by之后进行执行的,这些数据就已经进行分组了,可以进行使用聚合函数进行分组过滤的,是在聚合后对组进行记录的

group by语句通常会和聚合函数一起进行使用的,按照一个或者多个队列的结果进行分组的,然后对每个组执行聚合的操作

以下是一个案例:

列举的是emp表:

求每个部门的平均工资
select  deptno ,avg(sal) from emp group by deptno;

 

求每个部门的平均薪水大于2000的部门
select deptno, avg(sal) avg_em from emp group by deptno having avg_em>2000;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值