join/left join条件写在on后面和where后面的区别

首先需要说明,连接的具体结果和数据库语言是有关系的,不同的数据库语言遵守的规则有细微的差别,不能一概而论,我这里是mysql。
首先,贴出两张表。
成绩表:score在这里插入图片描述

学生表:student在这里插入图片描述

1、left join 在on后增加条件含左表字段

SELECT * FROM student
left join score on score.s_id=student.s_id AND score.s_name='赵雷';

结果:在这里插入图片描述

可以看到,on后面的限制条件score.s_id=student.s_id AND score.s_name='赵雷'共同控制两个表的连接。只有score.s_id=student.s_id 并且 AND score.s_name='赵雷'的数据进行了连接。而且,在展示的时候还要保证主表数据不会缺失。
下图同理
在这里插入图片描述

2、left join 在on后增加条件含右表字段

SELECT * FROM student
left join score on score.s_id=student.s_id AND score.s_score is not null;

得到的表太长,没有截完
在这里插入图片描述
可以看到,s_score为空的数据并没有参与连接。和left join 在on后增加条件含左表字段功能一样。on后面的限制条件score.s_id=student.s_id AND score.s_score is not null共同控制两个表的连接。只有score.s_id=student.s_id 并且score.s_score is not null的数据进行了连接。而且,在展示的时候还要保证主表数据不会缺失。

其实这个展示的不很清楚,我换另一个查询语句
在这里插入图片描述

可见,on后面的统统作为连接的条件,符合on后面所有条件的才连接。但是同时会保证主表(这里是左表)的完整性。

right join就省略了,因为right join和left join其实是一样的。(只是左右表的区别)

3、left join 在where后增加条件

条件中额外增加左表字段

在这里插入图片描述
条件中额外增加右表字段
在这里插入图片描述
只单单加一个相等连接条件
在这里插入图片描述
以上运行都会报错,说明left join后的条件一定要写在on后面,而不能写在where后面。

4、join,在where后面加条件
在这里插入图片描述
可以看到,where就是一个正常的筛选条件,根据where后面的所有条件来连接两个表。
5、join ,在on后面添加条件
在这里插入图片描述
可以看到,当是join时,条件放在where后面和on后面是一样的,因为没有保证主表数据完整这个限制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值