题 SQL Server中的LEFT JOIN与LEFT OUTER JOIN


有什么区别 LEFT JOIN 和 LEFT OUTER JOIN


1231
2018-01-02 08:30


起源


没有!该 OUTER 关键字是可选的。 - jarlh
这些答案都很好,但@jarlh的评论就是所需要的。谢谢! :) - rinogo


答案:


根据文件: FROM(Transact-SQL)

<join_type> ::= 
    [ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
    JOIN

关键字 OUTER 标记为可选(括在方括号中),在这种情况下,这意味着无论您是否指定它都没有区别。请注意,虽然join子句的其他元素也标记为可选,但是留下 他们 当然会有所作为。

例如,整个类型部分 JOIN 子句是可选的,在这种情况下,默认值是 INNER 如果你只是指定 JOIN。换句话说,这是合法的:

SELECT *
FROM A JOIN B ON A.X = B.Y

这是一个等效语法列表:

A LEFT JOIN B            A LEFT OUTER JOIN B
A RIGHT JOIN B           A RIGHT OUTER JOIN B
A FULL JOIN B            A FULL OUTER JOIN B
A INNER JOIN B           A JOIN B

另外看看我在这个问题上留下的答案: SQL离开连接与FROM行上的多个表?

enter image description here


1799
2018-01-02 08:51



完全正确。 OUTER允许ANSI-92兼容性。 - Sean Reilly
@ LasseV.Karlsen不会更好 INNER JOIN 在正确和公正 JOIN 在等价物列表的左侧? - nawfal
@ LasseV.Karlsen我只是说左边是简洁的形式,右边是扩展的形式。我认为如果你遵循同样的原则会使它变得连贯 JOIN也是。 - nawfal
@Outlier这是你的特权,但很明显其他人认为答案是好的。说实话,如果一个答案说X和另一个答案说X并引用文档,并将相关的文档部分复制到答案中,我的投票转到第二个答案,这就是我写答案的原因我做。那个人 索赔 X不好。如果你可以的话 证明 X,那更好(不是轻微的回答)。但是,无论你想做什么,你都有自己的特权。我怀疑你为什么认为这是毫无意义的,答案是否有任何错误? - Lasse Vågsæther Karlsen
@Outlier说实话,如果你不想读我的“长”答案,那么我的答案不适合你。这是为了其他所有人来到这里想知道同样的事情,并想要了解为什么会这样,以及在哪里可以找到更多信息,等等。很明显,你是那种想要这个答案的人:“无”,但遗憾的是Stack Overflow上不是一个合法的答案,也不是。 - Lasse Vågsæther Karlsen


回答你的问题 LEFT JOIN之间没有区别   和LEFT OUTER JOIN,它们完全相同 那说......

在顶层,主要有3种类型的连接:

  1. 交叉

  1. 内部联接  - 如果两个表中都存在数据,则获取数据。

  2. 外联 属于的 3 类型:

    1. LEFT OUTER JOIN  - 如果左表中存在数据,则获取数据。
    2. RIGHT OUTER JOIN  - 如果右表中存在数据,则获取数据。
    3. FULL OUTER JOIN  - 如果存在于两个表中的任何一个表中,则获取数据。
  3. 交叉加入顾名思义,确实如此 [n X m] 将一切都融入一切。
    类似于我们只是列出要加入的表格的场景(在 FROM 的条款 SELECT 声明),用逗号分隔它们。


需要注意的要点:

  • 如果你提到的话 JOIN 那么默认它是一个 INNER JOIN
  • 一个 OUTER 加入必须 LEFT | RIGHT | FULL 你不能简单地说 OUTER JOIN
  • 你可以放弃 OUTER 关键字,只是说 LEFT JOIN 要么 RIGHT JOIN 要么 FULL JOIN

对于那些想要以更好的方式想象这些内容的人,请访问以下链接: SQL连接的可视化解释


621
2017-12-09 18:05



很好的答案。如果您说“LEFT OUTER JOIN - 从左表中获取所有数据,如果预设的话,则从右侧获取匹配数据”将更加清晰。 2.1(和2.2的类似变化) - ssh
你也可以通过'select * from TableA,TableB'进行交叉连接 - om471987
对不起,如果我是necrobumping,但是 CROSS JOIN 同样的 FULL JOIN? - TechnicalTophat
@RhysO不,CROSS JOIN是一个笛卡尔积,即一个表的CROSS JOIN,有n行,有一个表,有m行,总是给(n * m)行,而表的FULL OUTER JOIN,有n行,有一个表,有m行,将给出最多(n + m)行 - sactiw


左连接和左外连接有什么区别?

没有LEFT JOIN 和 LEFT OUTER JOIN 是等价的。


274
2018-01-02 08:31



呃你好!谁投票了这个? LEFT JOIN与LEFT OUTER JOIN相同。 - Mitch Wheat
Microsoft SQL Server和任何其他符合SQL的RDBMS都是这种情况。 - Bill Karwin
如果你添加一个关于为什么的参考或解释,那将是很好的 OUTER 是可选的。 - Zero3
它是可选的,因为它是不必要的! - Mitch Wheat
MySQL怎么样?它们相当于? - stack


阅读更多内容 SQL连接的可视化表示

Visual Representation of SQL Joins


117
2017-10-28 23:02



我喜欢图表,但它有一个缺陷。为什么他们会在全连接中使用OUTER而在LEFT和RIGHT JOINS中不使用OUTER?这就是导致OUTER混淆的原因 - 混合使用它。在所有查询中使用“OUTER”,或者根本不使用“OUTER”。始终如一! - goku_da_master
-1甚至没有解决实际问题,只是提醒你“左连接和左外连接有什么区别?” - Martin Smith
不回答问题(关于LEFT JOIN和LEFT OUTER JOIN)。 LEFT OUTER JOIN没有显示在漂亮的图片中 - DaveBoltman


我是PostgreSQL DBA,据我所知,外部或非外部联接之间的区别差异是一个在互联网上有相当多讨论的话题。直到今天,我从未看到过这两者之间的差异;所以我走得更远,我试图找到它们之间的区别。 最后,我阅读了有关它的整个文档,我找到了答案,

因此,如果您查看文档(至少在PostgreSQL中),您可以找到以下短语:

“这些话 INNER 和 OUTER 是所有形式的可选项。 INNER 是默认值; LEFTRIGHT,和 FULL 意味着一个外部联盟。“ 

换句话说,

LEFT JOIN 和 LEFT OUTER JOIN 是相同的

RIGHT JOIN 和 RIGHT OUTER JOIN 是相同的

我希望它能为那些仍在努力找到答案的人做出贡献。


52
2017-08-30 02:33





旁边的话没什么可说的:enter image description here


44
2017-08-12 22:05



如何方便排除内部排除查询... - a20
可视化:“很少使用”,很好 - Thomas Mulder


Left Join 和 Left Outer Join 是一个和 相同。前者是后者的简写。关于这一点也可以这么说 Right Join 和 Right Outer Join 关系。示威将说明平等。通过提供每个查询的工作示例 SQL小提琴。此工具将允许动手操作查询。

特定

enter image description here

左加入 和 左外连接

enter image description here

结果

enter image description here


正确的加入 和 正确的外部加入

enter image description here

结果

enter image description here


37
2018-05-22 17:09



好容易的介绍 - vibs2006
很好的示范。 - Naveen Kumar V