LEFT JOIN和LEFT OUTER JOIN之间的区别是什么?


当前回答

语法糖,让不经意的读者更清楚地看到,连接不是内在的。

其他回答

语法糖,让不经意的读者更清楚地看到,连接不是内在的。

根据文档:FROM(Transact-SQL):

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

关键字OUTER标记为可选(括在方括号中)。在这种特定情况下,是否指定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

还可以看看我在另一个SO问题上留下的答案:SQL左连接与FROM行上的多个表?。

左连接和左外部连接之间的区别是什么?

没有什么LEFT JOIN和LEFT OUTER JOIN是等效的。

左连接和左外部连接是相同的。前者是后者的简写。右联接和右外部联接关系也是如此。这次示威将说明平等。通过SQLFiddle提供了每个查询的工作示例。该工具将允许手动操作查询。

鉴于

左连接和左外部连接

后果


右连接和右外部连接

后果

我发现按以下顺序更容易想到联接:

CROSS JOIN-两个表的笛卡尔乘积。所有连接从此处开始INNER JOIN-添加了过滤器的CROSS JOIN。OUTER JOIN-缺少元素的INNER JOIN(来自LEFT或RIGHT表)随后添加。

在我找到这个(相对)简单的模型之前,JOIN总是有点像一门黑色艺术。现在它们很有意义。

希望这能帮助你,而不是让你困惑。