左外连接和右外连接

请帮助我。 我有2个表:表A(43行)和表B(925)行。

当我做表左外连接B,我应该期望多少行,当我做表时右外连接表B我应该期待多少行? 假设A和B加入到fid中,表b中的所有行都与表A匹配fid。我很困惑,请帮助我理解左和右外连接和预计要返回的行数。 谢谢


这将有所帮助

http://www.w3schools.com/sql/sql_join_left.asp - >左外连接

http://www.w3schools.com/sql/sql_join_right.asp - >右外连接


让我们一步一步看看它,并从一个内部联接开始。 TableA有43行,TableB有925行。 加入表格后,您会得到多少行? 答:你不能说,因为这取决于你的加入标准。

让我们来缩小例子:TableA = 3条记录,TableB = 3条记录。 如果您在加入标准中找不到匹配项(例如,按部门加入,但tableA仅包含部门1和2的记录,而tableB仅包含部门3和4的记录),则结果包含零个记录。 另一方面,如果所有记录匹配(例如,只有部门加入,且两个表只包含部门1的记录),那么您将获得所有组合= 3 x 3 = 9条记录。

这是3 + 3记录的另一个例子:

表A:

joinkey value
1       A1
2       A2
3       A3

tableB的:

joinkey value
1       B11
2       B21
2       B22
select * from tableA inner join tableB on tableA.joinkey = tableB.joinkey;

这个查询会得到3条记录:

joinkey valueA valueB
1       A1     B11
2       A2     B21
2       A2     B22

A1在tableB中找到一个匹配,A2找到两个,而A3找不到。

那么外连接有什么区别? 通过外部联接,您可以获得内部联接中的所有记录以及外部联接的表中没有匹配的所有记录。

select * from tableA left outer join tableB on tableA.joinkey = tableB.joinkey;

select * from tableB right outer join tableA on tableA.joinkey = tableB.joinkey;

这两个查询中的外连接表是tableB。 查询是等效的。

结果:

joinkey valueA valueB
1       A1     B11
2       A2     B21
2       A2     B22
3       A3     null

现在你得到一个A3的记录,它在外连接表中没有匹配。

现在让我们看看相反的连接:

select * from tableB left outer join tableA on tableA.joinkey = tableB.joinkey;

select * from tableA right outer join tableB on tableA.joinkey = tableB.joinkey;

这些查询再次是平等的。 外连接表现在是tableA。 但是tableB中没有记录在外连接的表A中没有匹配,所以结果与内连接的结果相同:

joinkey valueA valueB
1       A1     B11
2       A2     B21
2       A2     B22

只有一句话:你看到你可以同时使用左外连接和右外连接 - 只需交换表。 所以为了不会感到困惑,请使用一个。 我建议你远离正确的外部连接并坚持左外连接,这是大多数人习惯的。 (这也意味着您可以在Internet上找到更多示例:-)

链接地址: http://www.djcxy.com/p/24919.html

上一篇: Left outer join and Right outer join

下一篇: Why does X[Y] join of data.tables not allow a full outer join, or a left join?