left(right) join on后面 加条件和where后面加条件的区别;left join,right join,(inner)join的区别

left(right) join on后面 加条件和where后面加条件的区别

(1)select  * from A left join B on A.id = B.id **and** A.name='lily' and B.score is not null;
(2)select  * from A left join B on A.id = B.id **where** A.name='lily' and B.score = '100'

区别:
on只是对局部条件做限制
where是对全局做限制,就是相当于对最后查询出来的整个结果做限制

对于(1):
会查询出A表中是所有数据, 无论on后面跟什么条件,主表A的数据都会被查出来,即使 and B.score is not null 没有符合条件的数据也不会过滤掉A表的数据,所以限制条件没用。比如A表有50条记录,过滤后仍有50条

对于(2):
会先查询出A表所有的数据,然后根据where条件过滤掉不符合的数据。比如A表有50条记录,过滤后可能有40条

left join,right join,(inner)join的区别
1:inner join
理解为“有效的连接”,就是根据on后面的关联条件,两张表中都有的数据才会显示; on 可以直接用where来替代。
2:left join
理解为“主表全显,从表看on,从表没有数据显示null”(主表数据不受影响),即主表全显示,连接后的表看on后面的选择条件,left join后面的条件,并不会影响左表的数据显示,左表数据会全部显示出来,连接的表如果没有数据,则全部显示为null.
3: right join right join
理解为“主表看on,从表全显,主表没有数据显示null”(右表数据不受影响),即右表数据全部显示,主表数据看on后面的选择条件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值