SQL中RIGHT & LEFT JOIN与RIGHT & LEFT OUTER JOIN的区别

98

在以下两种情况下,结果有何不同:

  1. RIGHT JOIN和RIGHT OUTER JOIN
  2. LEFT JOIN和LEFT OUTER JOIN

请通过一些例子来解释它们的区别。


有关使用维恩图进行内部连接和外部连接的滥用(包括本页面),请参见我在重复问题上的评论。 - philipxy
4个回答

182

RIGHT JOINRIGHT OUTER JOIN 没有区别,两者相同。这意味着 LEFT JOINLEFT OUTER JOIN 也是一样的。

SQL连接可视化图解


2
这很有趣。(n00b警告)那么为什么需要左连接和右连接呢?为什么不在查询中反转主表和连接表的位置,并只使用一个连接方向呢? - Drew
2
因为有时需要联结超过2个表,这样可以更灵活地选择如何编写查询语句。 - Lèse majesté
1
确实,如果你反转表格,右连接总是可以表示为左连接,因此你可以不使用正确的连接而得到结果。然而,有时候你会写一个复杂的查询,发现需要使用外连接,这时使用右连接比重新排列表格更简单。 - HLGEM
1
CROSS JOIN怎么样? - RPM1984
6
根据 CodeProject 的许可证,“作者以任何形式发表的关于作品的文章未经作者同意不得分发或重新发布。” 我已删除该图片。除非您获得了作者的许可以使用此图片,否则您不能将其添加到您的问题中。 - user1228
显示剩余4条评论

33

很好的SQL Join解释:

enter image description here

参考: 链接


6
没有名字。 - Muhammad Umer

25

这里有一个非常好的可视化解释SQL连接,是由我们自己的Jeff Atwood提供的。右外连接与右连接相同,左连接和左外连接也是相同的。


他在自己的评论中驳斥了那篇文章。请查看我在问题(和那篇文章)中关于维恩图滥用的评论。 - philipxy
我找不到你的评论。我不确定“repudiates”是我会选择的词。尽管如此,很明显Venn图解释并不能涵盖几个重要的情况。 - Leonard
不好意思,我在这208条评论中没有看到我期望的那条评论。但是我期望的内容与我的其他评论相同,在这里可以看到我的问题评论。 - philipxy
你似乎没有注意到我的评论实际上是在说人们不关注Venn图帖子的实际含义。例如:圆圈上写着tableA和tableB,但在最慷慨的解释下,它们包含了在Table A左连接tableB和tableA右连接tableB中的行值。Jeff的评论(#33)包括“任何导致比您最初开始的行数更多的内容都会完全破坏整个Venn图概念” - 这是驳斥。此外,他比自己认为的还要错,因为当没有更多行时,它们也会崩溃。 - philipxy

14

右连接和右外连接有什么不同?

没有区别。

左连接和左外连接呢?

没有区别。

简单来说,关键字OUTER是可选的。您可以包含或省略它而不会影响结果集。


1
这个在哪里有文档记录? - Qtax

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接