左外连接和左连接之间有什么区别?结果是一样的。
回答你的问题,left join和 left outer join之间没有区别,它们完全相同,也就是说……
在顶层,主要有三种连接类型:
- INNER连接
- OUTER连接
- CROSS连接
-
INNER JOIN - 仅在两个表中都存在时返回数据。
-
OUTER JOIN分为3种类型:
LEFT OUTER JOIN
- 仅在左表中存在时返回数据。RIGHT OUTER JOIN
- 仅在右表中存在时返回数据。FULL OUTER JOIN
- 在两个表中任意一个表中存在时返回数据。
-
CROSS JOIN,顾名思义,连接的是所有组合。
类似于我们仅列出参与连接的表(在SELECT
语句的FROM
子句中),用逗号将它们分隔开来。
需要注意的事项:
- 如果只提到
JOIN
,则默认为INNER JOIN
。 - OUTER连接必须是
LEFT
|RIGHT
|FULL
,不能简单地说OUTER JOIN
。 - 您可以删除
OUTER
关键字,仅使用LEFT JOIN
或RIGHT JOIN
或FULL JOIN
。
对于那些想更好地可视化这些内容的人,请访问此链接:SQL联接的视觉解释
根据文档:FROM (Transact-SQL):
::= [ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ ] ] JOIN
关键字OUTER
被标志为可选的(括在方括号中)。在这种情况下,您指定 OUTER
还是不指定都没有任何区别。请注意,虽然连接条件的其他元素也是可选的,但是省略它们将会产生不同的结果。
例如,在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 left join vs multiple tables on FROM line?