mysql中where,having ,on 的区别

where和having的区别

过滤方式特点
wherewhere进行分组前的过滤;where后面不能写聚合函数
havinghaving 是分组后的过滤;having后面可以写聚合函数

mysql简单查询执行顺序

from–> where–> group by --> having --> select --> order by

案例

--查询平均薪资大于6000的部门名称不为null的部门,需要在分组后再次进行过滤,使用having
select dept_name,
	   avg(salary)
from emp
where dept_name is not null
group by dept_name
having avg(salary)>6000;

where 和on 的区别

过滤方式特点
wherewhere是先生成关联表再对关联表进行筛选;where的优先级低于left join
onon是先对表进行筛选在生成关联表;on执行的优先级高于left join

当我们使用on关键字时,会先根据on后面的条件进行筛选,条件为真时返回该行,由于on的优先级高于left join,所以left join关键字会把左表中没有匹配的所有行也都返回;where对与行的筛选是在left join之后的,也就是生成临时表之后才对临时表进行筛选。
on是选筛选后关联,where是先关联后筛选。

案例

select t1.* from t1 left join t2 on t1.a=t2.a and t1.b>2;
select t1.* from t1 left join t2 on t1.a=t2.a where t1.b>2;

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值