LEFT JOIN
和之间有什么区别LEFT OUTER JOIN
?
LEFT JOIN
和之间有什么区别LEFT OUTER JOIN
?
Answers:
根据文档:FROM(Transact-SQL):
<join_type> ::=
[ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
JOIN
该关键字OUTER
被标记为可选(括在方括号中)。在这种特定情况下,是否指定OUTER
都没有区别。请注意,尽管join子句的其他元素也被标记为可选元素,但将它们省略会有所不同。
例如,JOIN
子句的整个type-part 是可选的,在这种情况下,默认情况是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
还要看看我在另一个SO问题上留下的答案:SQL左联接与FROM行上的多个表?。
INNER JOIN
的右侧和JOIN
左侧是否会更好?
JOIN
s 遵循相同的规则,则会使其变得连贯。
要回答您的问题,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
。对于那些想以更好的方式可视化它们的人,请转到此链接: SQL联接的可视化解释
CROSS JOIN
与一样FULL JOIN
吗?
Cross Join
与Full Outer Join
... 之间的区别的有价值的答案中添加一个特殊说明,在某种程度上似乎很相似。
我是PostgreSQL DBA,据我所知,外部联接或非外部联接之间的区别是一个在互联网上引起广泛讨论的话题。直到今天,我还没有看到两者之间的区别。因此,我走得更远,尝试找出两者之间的区别。最后,我阅读了有关它的整个文档,并找到了答案,
因此,如果您查看文档(至少在PostgreSQL中),则可以找到以下短语:
“的字样INNER
,并OUTER
在所有形式的可选的。INNER
是默认; LEFT
,RIGHT
,和FULL
暗示外连接。”
换句话说,
LEFT JOIN
并且LEFT OUTER JOIN
是相同的
RIGHT JOIN
并且RIGHT OUTER JOIN
是相同的
我希望这可以为仍在努力寻找答案的人们做出贡献。
为什么左/右和左/右/外相同?让我们解释一下为什么这个词汇。了解LEFT和RIGHT联接是OUTER联接的特定情况,因此除了OUTER LEFT / OUTER RIGHT之外别无其他。OUTER 联接也称为FULL OUTER,而OUTER联接的部分结果是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的子案例。词汇,教师的解释方式以及上面的一些答案,通常会使看起来好像有很多不同类型的联接。但这实际上非常简单。
JOIN
隐含INNER JOIN
” 是否/如何符合您对外部联接词汇的推理?
回答你的问题
在Sql Server中加入语法OUTER是可选的
msdn文章中提到了它:https ://msdn.microsoft.com/zh-cn/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:加入Sql Server
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
希望对您有所帮助。
就此问题而言,我也想发布2个“ APPLY”运算符:
加盟:
内联接 =联接
外连接
左外联接=左联接
正确的外部联接=正确的联接
完全外部联接=完全联接
交叉加入
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/
实际示例,何时在SQL中使用OUTER / CROSS APPLY
我发现APPLY运算符非常有益,因为它们提供的性能要好于在子查询中进行相同的计算。它们还替代了旧版SQL Server中的许多分析功能。这就是为什么我相信在对JOINS感到满意之后,一个SQL开发人员应该尝试接下来学习APPLY运算符。
OUTER
关键字是可选的。