全外连接与全连接

Posted

技术标签:

【中文标题】全外连接与全连接【英文标题】:FULL OUTER JOIN vs. FULL JOIN 【发布时间】:2012-07-27 17:34:34 【问题描述】:

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

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

【问题讨论】:

是的,这两个查询在 SQL Server 2008 R2 中给我的结果相同。 这能回答你的问题吗? LEFT JOIN vs. LEFT OUTER JOIN in SQL Server 【参考方案1】:

Microsoft® SQL Server™ 2000 使用这些 SQL-92 关键字进行外连接 在 FROM 子句中指定:

左外连接或左连接

右外连接或右连接

全外连接或全连接

来自MSDN

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

【讨论】:

【参考方案2】:

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

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

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

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

【讨论】:

【参考方案3】:

其实它们是一样的。 LEFT OUTER JOINLEFT JOIN 相同,RIGHT OUTER JOINRIGHT JOIN 相同。从INNER Join 进行比较会提供更多信息。

详情请参阅Wikipedia article。

【讨论】:

完美,谢谢。我遇到的很多教程都根据自己的风格使用它们,而没有注意它们是相同的。 连接的可视化表示:codeproject.com/Articles/33052/…

以上是关于全外连接与全连接的主要内容,如果未能解决你的问题,请参考以下文章

数据库里左连接右连接和全连接的区别

你知道TCP的半连接与全连接队列吗?

全连接层(FC)与全局平均池化层(GAP)

卷积层(FCN)替换全连接层(FC)的意义

卷积层(FCN)替换全连接层(FC)的意义

TCP 半连接队列和全连接队列