在SQL Server中,LEFT JOIN与LEFT OUTER JOIN的区别
在SQL Server中,LEFT JOIN与LEFT OUTER JOIN的区别
什么是 LEFT JOIN
和 LEFT OUTER JOIN
之间的差异?
admin 更改状态以发布 2023年5月21日
回答你的问题,LEFT JOIN和LEFT OUTER JOIN之间没有任何区别,它们完全相同,也就是说...
在顶层,主要有三种类型的连接:
- 内连接
- 外连接
- 交叉连接
-
内连接 - 仅在两个表中都存在数据时获取数据。
-
外连接分为3种:
LEFT OUTER JOIN
- 仅从左表中获取存在的数据。RIGHT OUTER JOIN
- 仅从右表中获取存在的数据。FULL OUTER JOIN
- 获取两个表中任意一个存在的数据。
-
交叉连接直接给出所有可能的匹配组合(
[n X m]
),类似于列出要连接的表(在SELECT
语句的FROM
子句中),用逗号分隔它们的情况。
需要注意的几点:
- 如果只提到
JOIN
,则默认是INNER JOIN
。 OUTER
连接必须为LEFT
|RIGHT
|FULL
,不能简单地说OUTER JOIN
。- 您可以删除
OUTER
关键字,只使用LEFT JOIN
或RIGHT JOIN
或FULL JOIN
。
想更好地可视化这些内容的人,请访问此链接:SQL连接的可视化解释
根据文档:FROM(Transact-SQL): \n\n
::= [ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ ] ] JOIN
\n\n关键词OUTER
被标记为可选的(用方括号括起来)。 在这种情况下,无论您是否指定OUTER
都没有影响。 请注意,虽然联接子句的其他元素也被标记为可选的,但省略它们会导致不同的结果。 \n\n例如,整个JOIN
子句的类型部分是可选的,若省略,则默认为INNER
。 换句话说,以下语法是合法的: \n\n
SELECT * FROM A JOIN B ON A.X = B.Y
\n\n以下是等效语法的列表: \n\n
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
\n\n还可以看看我在此Stack Overflow问题上留下的答案:SQL左联接与多个表的FROM行有什么不同?。