关于Mysql使用left join时,筛选条件加在where和on后的区别

测试

下面以staff_infostaff_score两张表为例,演示过滤条件放在where和on之间的区别

建表语句

1、员工基本信息表

CREATE TABLE `staff_info` (
  `staff_id` varchar(10) NOT NULL COMMENT '员工编号',
  `staff_name` varchar(10) DEFAULT NULL COMMENT '员工姓名',
  PRIMARY KEY (`staff_id`)
) ENGINE=InnoDB DEFAULT COMMENT='员工基本信息表';

2、员工得分表

CREATE TABLE `staff_score` (
  `staff_id` varchar(10) DEFAULT NULL COMMENT '员工编号',
  `score` int DEFAULT NULL COMMENT '得分'
) ENGINE=InnoDB COMMENT='员工得分表';

插入数据后,得到的表为

1、员工基本信息表
员工基本信息表
2、员工得分表
员工得分表

on 和 where 具体分析条件

1、放在on后

筛选得分大于50分的人员信息

SELECT
	si.staff_id,
	si.staff_name,
	ss.score 
FROM
	staff_info si
	LEFT JOIN staff_score ss ON ss.staff_id = si.staff_id AND ss.score > 50

不符合筛选条件的左表数据还在,但关联的右表数据中score那一栏为Null
在这里插入图片描述

2、放在where后

筛选得分大于50分的人员信息

SELECT
	si.staff_id,
	si.staff_name,
	ss.score 
FROM
	staff_info si
	LEFT JOIN staff_score ss ON ss.staff_id = si.staff_id 
WHERE
	ss.score > 50

只显示了符合筛选条件的左表数据
在这里插入图片描述

总结

1、使用left join时,若右表的数据想要影响左表的数据时(即右表条数减少,关联的左表条数也随之减少),就把条件写在where后
2、当把条件写在on后时,此时条件只会影响右表,不会影响左表(即右表条数减少,关联的左表条数不变),左表的数据查不到右表数据时,不影响左表的数据条数,会将关联的右表数据补成null

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值