协慌网

登录 贡献 社区

SQL Server 中的 LEFT JOIN 与 LEFT OUTER JOIN

LEFT JOINLEFT OUTER JOIN什么区别?

答案

根据文档: FROM(Transact-SQL)

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

关键字OUTER被标记为可选(括在方括号中),在这种情况下,这意味着无论您是否指定它都没有区别。请注意,虽然 join 子句的其他元素也标记为可选,但将它们排除在外当然会产生影响。

例如, JOIN子句的整个类型部分是可选的,在这种情况下,如果只指定JOIN ,则默认为INNER 。换句话说,这是合法的:

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 左连接与 FROM 线上的多个表?

在此输入图像描述

要回答你的问题,LEFT JOIN 和 LEFT OUTER JOIN 之间没有区别,它们完全相同 ...

在顶层,主要有 3 种类型的连接:

  1. 交叉

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

  2. OUTER JOIN3种类型:

    1. LEFT OUTER JOIN - 如果左表中存在数据则获取数据。
    2. RIGHT OUTER JOIN - 如果右表中存在数据,则获取数据。
    3. FULL OUTER JOIN - 获取两个表中任何一个表中的数据。
  3. CROSS JOIN ,正如其名称所暗示的那样, [n X m]将所有东西都加入到一切中。
    类似于我们只是列出要加入的表(在SELECT语句的FROM子句中)的方案,使用逗号分隔它们。


需要注意的要点:

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

对于那些想要以更好的方式可视化这些内容的人,请转到此链接: SQL 连接的可视化解释

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

没什么LEFT JOINLEFT OUTER JOIN是等效的。