mysql:用两张表来解释 left join on [条件] 和where后面加条件的区别

用两张表来解释 left join on [条件] 和where后面加条件的区别

student_info 表数据

在这里插入图片描述

student_score表数据

在这里插入图片描述

这个一张学生表,一张学生成绩表:

我们现在测试left join

SELECT
	c.number AS Cnumber,
	s.* 
FROM
	student_info s
	LEFT JOIN student_score c ON s.number = c.number

查询结果:

在这里插入图片描述

上面可以看出 使用 left join 中,on 后面的条件 不管左表有没有匹配上,都是返回主表的列数据。只不过左表返回的数据为空

再来看,在上面的sql上增加一个条件 s.is_valid = 1

SELECT
	c.number AS Cnumber,
	s.* 
FROM
	student_info s
	LEFT JOIN student_score c ON s.number = c.number AND s.is_valid = 1

在这里插入图片描述

可以看出查询的结果: 有一个 范剑同学 is_valid = 0 此时也被查询出来了。

所以我们可以得到一个结论就是:

left join on 后面加条件 and 语句来进行过滤或者是查询,无论and 后面连接的条件是 OR 主表的行还是会全部返回的。

所以如果要 筛选出 is_valid = 1 的同学,就必须要在where里面进行筛选。

SELECT
	c.number AS Cnumber,
	s.* 
FROM
	student_info s
	LEFT JOIN student_score c ON s.number = c.number 
WHERE
	s.is_valid = 1

在这里插入图片描述

可以看出 此时 is_valid = 1的同学已被筛选出来。

总结:

在使用left jion时,on和where条件的区别如下:

1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录,在右表返回数据行不匹配,右表数据行会显示为NULL

2、where条件是在临时表生成好后,再对临时表进行过滤的条件。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值