轻松理解left join、right join

有的时候由于业务需求,我们必须要用到left join或者right join。那么你对left join或者right join产生过疑惑么?

这里就以left join为例

对于left join,我们印象最深的就是左表的数据会全部显示,右边的数据满足条件会显示。那么这句话具体的意思是啥呢?

假设有以下两张表:

表A
IDNAME
1J
2K
3L
表B
IDAGE
210
320
430
SELECT * FROM A LEFT JOIN B ON A.id = B.id

结果是:

A.IDA.NAMEB.IDB.AGE
1JNULLNULL
2K210
3L320

这个结果很容易理解,以左表A为基础,ON的条件是用来筛选右表B的

SELECT * FROM A LEFT JOIN B ON A.ID = B.ID AND A.ID = 2

结果是:

A.IDA.NAMEB.IDB.AGE
1JNULLNULL
2K210
3LNULLNULL

为什么第三条数据里面表B的部分也是NULL?首先,对于LEFT JOIN下没有WHERE条件的时候,左表A的所有数据肯定是可以完全展示的,因为就如如同上面说的,ON的条件是来筛选B表数据的,所以上面结果表中左边这块的A表部分数据是很好理解的。问题就在第第三条数据中B表部分为什么都是NULL,因为ON后面的条件中有一个A.ID=2,第三条数据A.ID=3,不符合条件,所以第三条数据中B部分为NULL。

SELECT * FROM A LEFT JOIN B ON A.ID = B.ID WHERE A.ID = 2

结果是:

A.IDA.NAMEB.IDB.AGE
2K210

对于这个结果,相信经历了前两个sql的你,应该可以理解了吧。ON的条件是来筛选B表数据的,WHERE的条件是能影响左右表的.

最后,给各位一个忠告,如果不是业务需要,能用inner join处理的,就别用left join或者right join,因为inner join查询效率上面比它们高。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值