left outer join 的简单总结

来源:互联网 发布:喵姐捏脸数据 编辑:程序博客网 时间:2024/05/22 12:13

表: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 0
原创粉丝点击