left outer join 的简单总结

表:lhc01

id      uid
3       1
2       1
1       1
4       1
1       2
3       2

表:lhc02

id      uid
1       2
4       1
2       1

一,基本left outer join

select * from lhc01 a left outer join lhc02 b on a.id=b.id;

id      uid     id      uid
3       1       NULL    NULL
2       1       2       1
1       1       1       2
4       1       4       1
1       2       1       2
3       2       NULL    NULL

二,让我们看下面三条语句:

1,select * from lhc01 a left outer join lhc02 b on a.id=b.id where b.id=2;

2,select * from lhc01 a left outer join lhc02 b on a.id=b.id and b.id=2;

3,select * from lhc01 a left outer join (select * from lhc02 where id=2) b on a.id=b.id;

其实如果理解sql的执行步骤这三条就很容易理解啦。

第1条相当于在“一”结果中筛选也b.id=2记录 

结果:

id      uid     id      uid
2       1       2       1

第2与第3的结果是一样的,只是第3条sql是先将lhc02进行了筛选,而第2条sql是在“一"的结果中将lhc02进行筛选。

id      uid     id      uid
3       1       NULL    NULL
2       1       2       1
1       1       NULL    NULL
4       1       NULL    NULL
1       2       NULL    NULL
3       2       NULL    NULL

三,再看下这三条语句

1,select * from lhc01 a left outer join lhc02 b on a.id=b.id where a.id=1;

2,select * from (select * from lhc01 where id=1) a left outer join lhc02 b on a.id=b.id ;

3,select * from lhc01 a left outer join lhc02 b on a.id=b.id and a.id=1;

第1与第2结果一样。

id      uid     id      uid
1       1       1       2
1       2       1       2

而第3条sql结果如下:

id      uid     id      uid
3       1       NULL    NULL
2       1       NULL    NULL
1       1       1       2
4       1       NULL    NULL
1       2       1       2
3       2       NULL    NULL

从上面几条语句可得出,不管是left outer join 还是 right outer join 对于主表来说条件筛选不要与on放一起,而非主表的条件筛选则不要与where放一起,这样得出的结果才是我们预期想要的,当然如果被用到的表数据量过大,建议都使用子查询的方式进去select。


总结的很简陋,请各位高手多拍砖!!

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值