今天突然想到了以前去面试的时候一个考官的问题:
请你讲一讲left outer join 和 right outer join 和 full outer join 的区别?
先说重要的
CROSS JOIN 笛卡尔乘积(所有可能的行对)
INNER JOIN 仅对满足连接条件的CROSS中的列
LEFT OUTER JOIN 一个表满足条件的行,和另一个表的所有行
RIGHT OUTER JOIN 与LEFT相同,但两个表的角色互换
FULL OUTER JOIN LEFT OUTER 和 RIGHT OUTER中所有行的超集
下面看个例子:用sql 2005 来做例子
第一准备两张表 ta tb 表
ta表:
[img]http://dl.iteye.com/upload/attachment/414841/5ac22cb8-c481-364a-8cf8-c6fc0b383e25.jpg[/img]
tb表:
[img]http://dl.iteye.com/upload/attachment/414843/005efd1c-6cfa-3657-a1e2-a3a76d662520.jpg[/img]
ta表和tb表通过ta表中的fid和tb表中id关联
第二添加数据
ta表数据如下:
[img]http://dl.iteye.com/upload/attachment/414847/6c981542-bf71-3ec6-8583-0069597723d0.jpg[/img]
tb表数据如下:
[img]http://dl.iteye.com/upload/attachment/414849/ab69ac97-abea-30e8-a6db-2e6092176a2e.jpg[/img]
第三我们使用left join 和 left outer join
select * from ta a left outer join tb b on a.fid = b.id
[img]http://dl.iteye.com/upload/attachment/414857/f1d88e4d-6ed7-3650-9517-c19f0b1800c6.jpg[/img]
left join 和left outer join 我们看到的结果一样
第四我们使用right join 和 right outer join
select * from ta a right join tb b on a.fid = b.id
[img]http://dl.iteye.com/upload/attachment/414862/b33cf01f-c56c-30c8-9316-6352a3705e85.jpg[/img]
right join 和right outer join 我们看到的结果一样
第五我们看看full outer join 的结果
select * from ta a full outer join tb b on a.fid = b.id
[img]http://dl.iteye.com/upload/attachment/414869/19db6d9f-890a-3c80-9729-c5460f88891a.jpg[/img]
如有什么错误请大家指出!
请你讲一讲left outer join 和 right outer join 和 full outer join 的区别?
先说重要的
CROSS JOIN 笛卡尔乘积(所有可能的行对)
INNER JOIN 仅对满足连接条件的CROSS中的列
LEFT OUTER JOIN 一个表满足条件的行,和另一个表的所有行
RIGHT OUTER JOIN 与LEFT相同,但两个表的角色互换
FULL OUTER JOIN LEFT OUTER 和 RIGHT OUTER中所有行的超集
下面看个例子:用sql 2005 来做例子
第一准备两张表 ta tb 表
ta表:
[img]http://dl.iteye.com/upload/attachment/414841/5ac22cb8-c481-364a-8cf8-c6fc0b383e25.jpg[/img]
tb表:
[img]http://dl.iteye.com/upload/attachment/414843/005efd1c-6cfa-3657-a1e2-a3a76d662520.jpg[/img]
ta表和tb表通过ta表中的fid和tb表中id关联
第二添加数据
ta表数据如下:
[img]http://dl.iteye.com/upload/attachment/414847/6c981542-bf71-3ec6-8583-0069597723d0.jpg[/img]
tb表数据如下:
[img]http://dl.iteye.com/upload/attachment/414849/ab69ac97-abea-30e8-a6db-2e6092176a2e.jpg[/img]
第三我们使用left join 和 left outer join
select * from ta a left outer join tb b on a.fid = b.id
[img]http://dl.iteye.com/upload/attachment/414857/f1d88e4d-6ed7-3650-9517-c19f0b1800c6.jpg[/img]
left join 和left outer join 我们看到的结果一样
第四我们使用right join 和 right outer join
select * from ta a right join tb b on a.fid = b.id
[img]http://dl.iteye.com/upload/attachment/414862/b33cf01f-c56c-30c8-9316-6352a3705e85.jpg[/img]
right join 和right outer join 我们看到的结果一样
第五我们看看full outer join 的结果
select * from ta a full outer join tb b on a.fid = b.id
[img]http://dl.iteye.com/upload/attachment/414869/19db6d9f-890a-3c80-9729-c5460f88891a.jpg[/img]
如有什么错误请大家指出!