关于MySQL外连接查询的NULL

left join 或 right join :
1) select * from 表1 left join 表2 on 表1=表2 where 表1.id>10 ; 
   //不考虑表2 的重复值有40条数据
   返回 表1 的所有数据40条。如果表2中没有对应的值以null 返回。

   1.1) select * from 表1 right join 表2 on 表1=表2 where 表1.id>10 ; 
       这时主表是 表2 ,如果表1中没有对应的值会以 null 返回,并且会被where条件过滤掉;
       //不考虑表2 的重复值有40条数据
       返回 表2 的数据30条。如果表1中没有对应的值会被过滤(10条)。

2) select * from 表1 left join 表2 on 表1=表2 
   where 表1.id>10 and 表2.time>unix_timestamp('2017-09-01'); 
   //不考虑表2 的重复值有20条数据
   返回 表1 的20条数据。如果表2中没有对应的值null则会被过滤调。

3) select * from 表1 left join 表2 on 表1=表2 and 表2.time>unix_timestamp('2017-09-01') 
   where 表1.id>10 ; 
   //不考虑表2 的重复值有30条数据(10条是表2的null值)
   返回 表1 的30条数据。如果表2中没有对应的值以null 返回。

总结:外连接查询如果非主表有条件,必须加在 :left Join .. on .. and (条件) ; 这样才不会过滤掉表2 的null值(有空再补图)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值