SQL Server中的左连接与左连接外连接
LEFT JOIN和LEFT 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的连接:
- 内
- 外
- 交叉
-
INNER JOIN – 如果两个表中都存在数据,则获取数据。
-
外部连接有三种types:
-
LEFT OUTER JOIN(LEFT OUTER JOIN– 获取左表中的数据。 -
RIGHT OUTER JOIN– 如果存在于右表中,则获取数据。 -
FULL OUTER JOIN– 提取数据(如果存在于两个表中的任何一个中)。
-
-
顾名思义, CROSS JOIN就是把所有东西都连接起来的
[n X m]。
类似于我们仅仅列出要join的表(在SELECT语句的FROM子句中)的情况,使用逗号分隔它们。
需要注意的是:
- 如果你只是提到
JOIN那么默认情况下它是一个INNER JOIN。 -
OUTER连接必须是LEFT|RIGHT| 你不能简单地说OUTER JOIN。 - 你可以删除
OUTER关键字,只是说LEFT JOIN或RIGHT JOIN或FULL JOIN。
对于那些想要更好地形象化的人,请点击此链接: SQL连接的可视化解释
左连接和左外连接有什么区别?
没事 LEFT JOIN和LEFT OUTER JOIN是等价的。
阅读更多关于SQL联接的可视化表示

我是一名PostgreSQL数据库pipe理员,就我所能理解的外部或外部连接差异而言,差异是一个在互联网上有相当多讨论的话题。 直到今天,我从来没有看到这两者之间的区别。 所以我走得更远,我试图找出这些之间的差异。 最后,我读了关于它的整个文档,我find了答案,
所以,如果你看文档(至less在PostgreSQL),你可以find这个短语:
“ INNER和OUTER在所有forms中都是可选的, INNER是默认的, LEFT , RIGHT和FULL意味着一个外连接。
换句话说,
LEFT JOIN和LEFT OUTER JOIN是相同的
RIGHT JOIN和RIGHT 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 Join和Left Outer Join是一个相同的 。 前者是后者的简写。 关于Right Join和Right Outer Join关系也是如此。 示范将说明平等。 每个查询的工作示例都通过SQL Fiddle提供。 这个工具将允许双手操作查询。
特定

左连接和左外连接

结果

正确的join和正确的外部join

结果

主要有三种types的JOIN
- Inner:获取两个表中存在的数据
- 只有join意味着内部join
-
外:有三种types
- LEFT OUTER – 只在左表中提取数据&匹配条件
- RIGHT OUTER – 只在右表和匹配条件下提取数据
- FULL OUTER – 提取任何或两个表中的数据
- (左或右或全)外部连接可以不写入“外部”
-
交叉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 JOIN和LEFT OUTER JOIN是一样的。
根据DoFactory
没有。
LEFT JOIN,默认情况下是OUTER。
我知道这是旧的,但想要把我的两分钱。我明白, LEFT JOIN应该是一样的LEFT OUTER JOIN但在我的经验,我看到一个LEFT JOIN拉回不同的结果比LEFT OUTER JOIN所以我已经开始使用关键词OUTER来更加具体和恰当。 本来应该回到LEFT JOIN行不会像在我使用LEFT OUTER JOIN时那样。 当我试图向同事解释这一点时,他无法得到他需要的行,所以我决定谷歌的差异,以便有一些支持,以显示他。 这可能是我不确定的SQL Server特定的事情。 我想说,在良好的实践中,明确指出你希望发生一个外连接会更明智。 只是我的意见。