如果使用左外连接(选择表A左外连接表B),当数据与左表(表A)不匹配时,我可以在右表(表B)中有空值。如果我更改选择查询顺序(选择表 B 左外连接表 A),现在我可以在表 A 中有空数据。因此,使用左外连接可以执行相同的操作。那么,右外连接有什么用呢?请帮我解决这个问题。
3 回答
left outer join
并且right outer join
在某种意义上是多余的。您可以只使用其中一个来编写查询。
提供它们的原因<
与提供它们的原因相同>
。有时,一个或另一个对于给定的逻辑操作更有意义。
至于我,我努力只使用join
and编写查询left outer join
。这left outer join
对我来说更有意义,因为它说“保留第一个表中的所有行,以及其他表中的匹配行”。这并不意味着这right outer join
是错误的,只是不同的人以不同的方式理解事物。
区别很简单——在左外连接中,将显示“左”表中的所有行,而不管“右”表中是否有任何匹配的列。在右外连接中,将显示“右”表中的所有行,而不管“左”表中是否有任何匹配的列。希望我们上面给出的示例也有助于澄清这一点。
我应该使用右外连接还是左外连接?其实,没关系。右外连接不添加左外连接没有的任何功能,反之亦然。要从右外连接和左外连接获得相同的结果,您所要做的就是切换表在 SQL 语句中出现的顺序。
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)