SQL Server中的左连接与左连接外连接

LEFT JOINLEFT OUTER JOIN什么区别?

根据文档: FROM(Transact-SQL) :

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

关键字OUTER被标记为可选的(用方括号括起来),这意味着在这种情况下是否指定它是没有区别的。 请注意,虽然连接子句的其他元素也被标记为可选,但将它们排除在外当然会有所作为。

例如, JOIN子句的整个types部分是可选的,在这种情况下,如果您只指定了JOIN ,则缺省值为INNER 。 换句话说,这是合法的:

 SELECT * FROM A JOIN B ON AX = BY 

以下是等效语法列表:

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

另外看看我留在这个其他SO问题的答案: SQL左连接与FROM行上的多个表? 。

在这里输入图像描述

为了回答你的问题,左连接和左外连接之间没有区别,它们与上述完全相同

在顶层,主要有三种types的连接:

  1. 交叉

  1. INNER JOIN – 如果两个表中都存在数据,则获取数据。

  2. 外部连接有三种types:

    1. LEFT OUTER JOINLEFT OUTER JOIN – 获取左表中的数据。
    2. RIGHT OUTER JOIN – 如果存在于右表中,则获取数据。
    3. FULL OUTER JOIN – 提取数据(如果存在于两个表中的任何一个中)。
  3. 顾名思义, CROSS JOIN就是把所有东西都连接起来的[n X m]
    类似于我们仅仅列出要join的表(在SELECT语句的FROM子句中)的情况,使用逗号分隔它们。


需要注意的是:

  • 如果你只是提到JOIN那么默认情况下它是一个INNER JOIN
  • OUTER连接必须是LEFT | RIGHT | 你不能简单地说OUTER JOIN
  • 你可以删除OUTER关键字,只是说LEFT JOINRIGHT JOINFULL JOIN

对于那些想要更好地形象化的人,请点击此链接: SQL连接的可视化解释

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

没事 LEFT JOINLEFT OUTER JOIN是等价的。

阅读更多关于SQL联接的可视化表示

SQL联接的可视表示

我是一名PostgreSQL数据库pipe理员,就我所能理解的外部或外部连接差异而言,差异是一个在互联网上有相当多讨论的话题。 直到今天,我从来没有看到这两者之间的区别。 所以我走得更远,我试图找出这些之间的差异。 最后,我读了关于它的整个文档,我find了答案,

所以,如果你看文档(至less在PostgreSQL),你可以find这个短语:

INNEROUTER在所有forms中都是可选的, INNER是默认的, LEFTRIGHTFULL意味着一个外连接。

换句话说,

LEFT JOINLEFT OUTER JOIN是相同的

RIGHT JOINRIGHT OUTER JOIN是相同的

我希望这可以为那些仍在努力寻找答案的人提供帮助。

除此之外没有什么可说的话: 在这里输入图像描述

我发现按以下顺序考虑联接更容易:

  • CROSS JOIN – 这两个表的笛卡尔积。 所有连接从这里开始
  • INNER JOIN – 添加了filter的CROSS JOIN。
  • 外部连接 – 一个内部连接,缺less的元素(从左边或右边的表格)之后添加。

直到我find这个(相对)简单的模型,JOINS总是多一点黑色艺术。 现在他们理所当然

希望这有助于超过它的混淆。

为什么左/右和左外/右外都一样? 让我们来解释为什么这个词汇。 理解LEFT和RIGHT连接是OUTER连接的具体情况,因此不能只是外部连接的左边/右边连接。 OUTER连接也被称为FULL OUTER,而LEFT和RIGHT连接则是OUTER连接的部分结果。 确实:

 Table A | Table B Table A | Table B Table A | Table B Table A | Table B 1 | 5 1 | 1 1 | 1 1 | 1 2 | 1 2 | 2 2 | 2 2 | 2 3 | 6 3 | null 3 | null - | - 4 | 2 4 | null 4 | null - | - null | 5 - | - null | 5 null | 6 - | - null | 6 OUTER JOIN (FULL) LEFT OUTER (partial) RIGHT OUTER (partial) 

现在很清楚为什么这些操作有别名,而且很明显只有三种情况存在:INNER,OUTER,CROSS。 有两个子shell的情况。 词汇,老师解释这个的方式,以及上面的一些答案,往往使它看起来像有很多不同types的联接。 但其实很简单

Left JoinLeft Outer Join是一个相同的 。 前者是后者的简写。 关于Right JoinRight Outer Join关系也是如此。 示范将说明平等。 每个查询的工作示例都通过SQL Fiddle提供。 这个工具将允许双手操作查询。

特定

在这里输入图像描述

左连接和左外连接

在这里输入图像描述

结果

在这里输入图像描述


正确的join和正确的外部join

在这里输入图像描述

结果

在这里输入图像描述

主要有三种types的JOIN

  1. Inner:获取两个表中存在的数据
    • 只有join意味着内部join
  2. 外:有三种types

    • LEFT OUTER – 只在左表中提取数据&匹配条件
    • RIGHT OUTER – 只在右表和匹配条件下提取数据
    • FULL OUTER – 提取任何或两个表中的数据
    • (左或右或全)外部连接可以不写入“外部”
  3. 交叉join:将一切都join到一切

句法糖,对于偶然的读者来说更加明显的是,连接不是内在的。

回答你的问题

在Sql Server连接语法中OUTER是可选的

它在msdn文章中提到: https ://msdn.microsoft.com/en-us/library/ms177634( v= sql.130).aspx

所以下面的列表显示了有和没有OUTER的连接等价语法

 LEFT OUTER JOIN => LEFT JOIN RIGT OUTER JOIN => RIGHT JOIN FULL OUTER JOIN => FULL JOIN 

其他等效的语法

 INNER JOIN => JOIN CROSS JOIN => , 

强烈推荐Dotnet Mob Artice: joinSql Server 在这里输入图像描述

只有3个连接:

  • A)交叉连接=笛卡尔(例如:表A,表B)
  • B)内部联接= JOIN(例如:表A联接/内部联接表B)
  • C)外部连接:

      There are three type of outer join 1) Left Outer Join = Left Join 2) Right Outer Join = Right Join 3) Full Outer Join = Full Join 

希望它能帮上忙。

LEFT JOIN从第一个(最左边的)表开始,然后与第二个(最右侧的)表logging匹配。

LEFT JOINLEFT OUTER JOIN是一样的。

根据DoFactory

没有。

LEFT JOIN,默认情况下是OUTER。

我知道这是旧的,但想要把我的两分钱。我明白, LEFT JOIN应该是一样的LEFT OUTER JOIN但在我的经验,我看到一个LEFT JOIN拉回不同的结果比LEFT OUTER JOIN所以我已经开始使用关键词OUTER来更加具体和恰当。 本来应该回到LEFT JOIN行不会像在我使用LEFT OUTER JOIN时那样。 当我试图向同事解释这一点时,他无法得到他需要的行,所以我决定谷歌的差异,以便有一些支持,以显示他。 这可能是我不确定的SQL Server特定的事情。 我想说,在良好的实践中,明确指出你希望发生一个外连接会更明智。 只是我的意见。