92

只是使用查询和示例来更好地理解连接。我注意到在 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

这些是否执行完全相同的操作以产生相同的结果,或者我会在更复杂的示例中遇到不同的结果?这只是可互换的术语吗?

4

3 回答 3

119

其实他们是一样的。LEFT OUTER JOIN和一样LEFT JOINRIGHT OUTER JOIN一样RIGHT JOIN。从INNER Join.

有关详细信息,请参阅此Wikipedia 文章

于 2012-07-30T03:09:21.667 回答
39

Microsoft® SQL Server™ 2000 将这些 SQL-92 关键字用于 FROM 子句中指定的外部连接:

  • 左外连接或左连接

  • 右外连接或右连接

  • 全外连接或全连接

来自MSDN

full outer joinor返回两个表中的full join所有行,匹配可以匹配的行,并将NULLs 放在不存在匹配行的位置。

于 2012-07-30T03:13:06.503 回答
14

确实有些数据库可以识别 OUTER 关键字。有些没有。在它被识别的地方,它通常是一个可选的关键字。FULL JOIN 和 FULL OUTER JOIN 几乎总是做同样的事情。(我想不出他们没有的例子。其他人能想到一个吗?)

这可能会让您想,“如果它没有意义,为什么它甚至会成为关键字?” 答案归结为编程风格。

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

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

于 2015-11-03T22:31:45.433 回答