0

如果使用左外连接(选择表A左外连接表B),当数据与左表(表A)不匹配时,我可以在右表(表B)中有空值。如果我更改选择查询顺序(选择表 B 左外连接表 A),现在我可以在表 A 中有空数据。因此,使用左外连接可以执行相同的操作。那么,右外连接有什么用呢?请帮我解决这个问题。

4

3 回答 3

1

left outer join并且right outer join在某种意义上是多余的。您可以只使用其中一个来编写查询。

提供它们的原因<与提供它们的原因相同>。有时,一个或另一个对于给定的逻辑操作更有意义。

至于我,我努力只使用joinand编写查询left outer join。这left outer join对我来说更有意义,因为它说“保留第一个表中的所有行,以及其他表中的匹配行”。这并不意味着这right outer join是错误的,只是不同的人以不同的方式理解事物。

于 2013-07-07T12:40:19.510 回答
0

区别很简单——在左外连接中,将显示“左”表中的所有行,而不管“右”表中是否有任何匹配的列。在右外连接中,将显示“右”表中的所有行,而不管“左”表中是否有任何匹配的列。希望我们上面给出的示例也有助于澄清这一点。

我应该使用右外连接还是左外连接?其实,没关系。右外连接不添加左外连接没有的任何功能,反之亦然。要从右外连接和左外连接获得相同的结果,您所要做的就是切换表在 SQL 语句中出现的顺序。

于 2013-07-07T12:45:56.810 回答
-1

SELECT * from TableA LEFT JOIN TableB 与 SELECT * from TableB RIGHT JOIN TableA 相同

SELECT * FROM TableA LEFT JOIN TableB TableA 中的所有行和 TableB 中的匹配行。如果在 TableB 中没有找到匹配的行,则 TableB 的所有列将被替换为 null

示例:表 A 行 1 2 3 表 B 行 2 3 4

TableA LEFT JOIN TableB 将给出以下元组: (1 NULL) (2 2) (3 3)

TableA RIGHT JOIN TableB 将给出以下元组: (2 2) (3 3) (NULL 4)

TableA OUTER JOIN TableB 以下元组: (1 NULL) (2 2) (3 3) (NULL 4)

于 2013-07-07T12:39:26.347 回答