全外连接 vs. 全连接

107

只是在练习查询和示例,以更好地理解连结。我注意到在SQL Server 2008中,以下两个查询产生相同的结果:

SELECT * FROM TableA
FULL OUTER JOIN TableB
ON TableA.name = TableB.name

SELECT * FROM TableA
FULL JOIN TableB
ON TableA.name = TableB.name

这两种方式执行的操作产生的结果完全相同吗?在更复杂的情况下是否会得到不同的结果?这只是可以互换使用的术语吗?


2
是的,在SQL Server 2008 R2中,这两个查询都给出了相同的结果。 - CptSupermrkt
这个回答解决了你的问题吗?SQL Server中的LEFT JOIN vs. LEFT OUTER JOIN - philipxy
3个回答

132

实际上它们是相同的。LEFT OUTER JOINLEFT JOIN相同,RIGHT OUTER JOINRIGHT JOIN相同。这种方式比从INNER Join进行比较更具信息量。

有关详细信息,请参见维基百科文章


6
好的,谢谢。我发现许多教程都根据自己的风格使用这些内容,而没有说明它们是相同的。 - CptSupermrkt
2
SQL连接的可视化表示:http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins - Hawkeye Parker

45

Microsoft® SQL Server™ 2000在FROM子句中使用以下SQL-92关键字来指定外连接:

  • LEFT OUTER JOIN或LEFT JOIN

  • RIGHT OUTER JOIN或RIGHT JOIN

  • FULL OUTER JOIN或FULL JOIN

引用自MSDN

FULL OUTER JOIN 或者 FULL JOIN 会返回两个表中的所有行,匹配出可以满足条件的行,并将空缺处填充为NULL


16

有些数据库识别OUTER关键字,而有些则不识别。在被识别的情况下,它通常是一个可选的关键字。几乎总是,FULL JOIN和FULL OUTER JOIN执行完全相同的操作。(我想不到有任何例外。还有其他人可以想到吗?)

这可能会让你感到困惑,“如果它没有意义,为什么它会成为一个关键字?”答案归结于编程风格。

在旧时代,程序员们努力使他们的代码尽可能紧凑。每个字符都意味着更长的处理时间。我们使用1、2和3个字母的变量。我们使用两位数字的年份。我们消除了所有不必要的空白。一些人仍然以这种方式编程。现在不再是处理时间的问题,而更多地关注快速编码。

现代程序员正在学习使用更具描述性的变量,并将更多的注释和文档放入他们的代码中。使用像OUTER这样的额外单词可以确保阅读代码的其他人更容易理解它。就会有更少的歧义。这种风格更易读,对未来将维护该代码的人更加友好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接