LEFT JOIN
和LEFT OUTER JOIN
之间的区别是什么?
答案 0 :(得分:2059)
根据文档: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 left join vs multiple tables on FROM line?。
答案 1 :(得分:670)
要回答您的问题,LEFT JOIN之间没有区别 和LEFT OUTER JOIN,它们完全相同表示......
INNER JOIN - 如果两个表中都有数据,则会提取数据。
外部加入属于 3 类型:
LEFT OUTER JOIN
- 获取左表中的数据。RIGHT OUTER JOIN
- 如果右表中有数据,则提取数据。FULL OUTER JOIN
- 获取两个表中任何一个表中的数据。 CROSS JOIN ,顾名思义,[n X m]
将所有东西都加入到所有内容中。
与我们只是列出要加入的表(在FROM
语句的SELECT
子句中)的情况类似,使用逗号分隔它们。
需要注意的要点:
JOIN
,则默认情况下为INNER JOIN
。OUTER
加入必须为LEFT
| RIGHT
| FULL
您不能简单地说OUTER JOIN
。OUTER
个关键字,只需说出LEFT JOIN
或RIGHT JOIN
或FULL JOIN
。对于那些想要以更好的方式想象这些内容的人,请访问以下链接: A Visual Explanation of SQL Joins
答案 2 :(得分:328)
左连接和左外连接有什么区别?
<强>没有即可。 LEFT JOIN
和LEFT OUTER JOIN
相同。
答案 3 :(得分:62)
我是PostgreSQL DBA,据我所知,外部或非外部联接之间的区别差异是一个在互联网上有相当多讨论的话题。直到今天,我从未看到过这两者之间的差异;所以我走得更远,我试图找到它们之间的区别。 最后,我阅读了有关它的整个文档,我找到了答案,
因此,如果您查看文档(至少在PostgreSQL中),您可以找到以下短语:
换句话说,
LEFT JOIN
和LEFT OUTER JOIN
是相同的
RIGHT JOIN
和RIGHT OUTER JOIN
是相同的
我希望它能为那些仍在努力找到答案的人做出贡献。
答案 4 :(得分:55)
Left Join
和Left Outer Join
是一个,相同。前者是后者的简写。关于Right Join
和Right Outer Join
关系也可以这样说。示威将说明平等。每个查询的工作示例都是通过 SQL Fiddle 提供的。该工具将允许动手操作查询。
<强>鉴于强>
<强>结果
<强>结果
答案 5 :(得分:38)
我发现按以下顺序更容易想到联接:
直到我弄清楚这个(相对)简单的模型,JOINS总是更像一个黑色艺术。现在他们完全有道理。
希望这有助于解决问题。
答案 6 :(得分:28)
为什么LEFT / RIGHT和LEFT OUTER / RIGHT OUTER相同?让我们解释为什么这个词汇。 理解LEFT和RIGHT连接是OUTER连接的特定情况,因此不能是OUTER LEFT / OUTER RIGHT以外的任何其他连接。 OUTER联接也称为 FULL OUTER,而不是OUTER联接的 PARTIAL 结果的LEFT和RIGHT联接。事实上:
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)
现在很清楚为什么这些操作有别名,而且很明显只有3种情况:INNER,OUTER,CROSS。有两个子案例用于OUTER。 词汇,教师解释这一点的方式,以及上面的一些答案,往往使它看起来有很多不同类型的连接。但实际上非常简单。
答案 7 :(得分:21)
回答你的问题
在Sql Server连接语法 OUTER 是可选的
在msdn文章中提到:https://msdn.microsoft.com/en-us/library/ms177634(v=sql.130).aspx
以下列表显示了使用和不使用 OUTER
的连接等效语法LEFT OUTER JOIN => LEFT JOIN
RIGHT OUTER JOIN => RIGHT JOIN
FULL OUTER JOIN => FULL JOIN
其他等效语法
INNER JOIN => JOIN
CROSS JOIN => ,
强烈推荐Dotnet Mob Artice:Joins in Sql Server
答案 8 :(得分:18)
主要有三种类型的JOIN
外面:有三种类型
交叉加入:将所有内容加入到所有内容中
答案 9 :(得分:18)
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
希望它有所帮助。
答案 10 :(得分:14)
句法糖,让随意的读者更明显地认为连接不是内在的。
答案 11 :(得分:1)
就此问题而言,我也想发布2个“ APPLY”运算符:
加入:
内部联接 = JOIN
外部加入
左外联接=左联接
正确的外部联接=正确的联接
完全外部联接=完全联接
交叉加入
SELF-JOIN :这不是完全独立的联接类型。这基本上是使用以上联接之一将表联接到自身。但是我觉得在上下文JOIN讨论中值得一提,因为您会在SQL Developer社区的许多人那里听到这个术语。
应用:
https://www.mssqltips.com/sqlservertip/1958/sql-server-cross-apply-and-outer-apply/
https://sqlhints.com/2016/10/23/outer-apply-in-sql-server/
Real life example, when to use OUTER / CROSS APPLY in SQL
我发现APPLY运算符非常有好处,因为与在子查询中进行相同的计算相比,它们提供了更好的性能。它们还替代了旧版SQL Server中的许多分析功能。这就是为什么我相信在对JOINS感到满意之后,一名SQL开发人员应该尝试接下来学习APPLY运算符。