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行上的多个表?。
其他回答
回答您的问题
在Sql Server中,连接语法OUTER是可选的
msdn文章中提到:https://msdn.microsoft.com/en-us/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
为什么左/右和左外/右外相同?让我们解释一下为什么使用这个词汇。请理解,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。外部有两个子情况。词汇、老师解释这一点的方式,以及上面的一些答案,通常会让人觉得有很多不同类型的连接。但其实很简单。
就在这个问题的上下文中,我还想发布2个“APPLY”运算符:
连接:
内部联接=联接外部连接左外部联接=左联接右外部联接=右联接完全外部连接=完全连接交叉连接
SelfJOIN:这不是一种单独的联接类型。这基本上是使用上述连接之一将表连接到自身。但我觉得在JOIN讨论中值得一提,因为您将从SQL Developer社区的许多人那里听到这个术语。
应用:
CROSS APPLY——类似于INNER JOIN(但增加了一个优点,即能够为Left表的每一行在Right表中计算一些值,并且只返回匹配的行)OUTER APPLY——类似于LEFT OUTER JOIN(但它增加了一个优点,即能够为LEFT表的每一行计算Right表中的某些内容,并且无论Right表中是否匹配,都会返回LEFT表中的所有行)
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中的许多分析函数。这就是为什么我相信在熟悉JOIN之后,一个SQL开发人员接下来应该尝试学习APPLY运算符。
只有3个连接:
A) 交叉连接=笛卡尔(例如:表A、表B)B) 内部联接=联接(例如:表A联接/内部联接表B)C) 外部连接:有三种类型的外部连接左外部联接=左联接右外部联接=右联接完全外部联接=完全联接
左连接和左外部连接是相同的。前者是后者的简写。右联接和右外部联接关系也是如此。这次示威将说明平等。通过SQLFiddle提供了每个查询的工作示例。该工具将允许手动操作查询。
鉴于
左连接和左外部连接
后果
右连接和右外部连接
后果
推荐文章
- 选项(RECOMPILE)总是更快;为什么?
- 设置数据库从单用户模式到多用户
- 我如何转义一个百分比符号在T-SQL?
- SQL Server恢复错误-拒绝访问
- 如何在SQL Server Management Studio中查看查询历史
- SQL Server索引命名约定
- 可以为公共表表达式创建嵌套WITH子句吗?
- SQL Server的NOW()?
- 在SQL Server中截断(不是四舍五入)小数位
- 如何在SQL Server数据库中更改列数据类型而不丢失数据?
- 保持简单,以及如何在一个查询中执行多个CTE
- 如何使用TSQL截断数据库中的所有表?
- 如何从表中导出所有数据到可插入的sql格式?
- 我如何执行插入和返回插入的身份与Dapper?
- 如何将时间按小时或10分钟分组?