全外连接与全连接
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 join
或full join
返回两个表中的所有行,匹配可以匹配的行并将NULL
s 放置在不存在匹配行的位置。
【讨论】:
【参考方案2】:确实有些数据库可以识别 OUTER 关键字。有些没有。 在被识别的地方,它通常是一个可选关键字。 FULL JOIN 和 FULL OUTER JOIN 几乎总是做同样的事情。 (我想不出他们没有的例子。其他人能想到一个吗?)
这可能会让您想,“如果它没有意义,为什么它甚至会成为关键字?”答案归结为编程风格。
在过去,程序员努力使他们的代码尽可能紧凑。每个字符都意味着更长的处理时间。我们使用了 1、2 和 3 个字母变量。我们使用了 2 位数的年份。我们消除了所有不必要的空白。有些人仍然这样编程。这不再是关于处理时间的问题。更多的是关于快速编码。
现代程序员正在学习使用更多的描述性变量,并在他们的代码中加入更多的注释和文档。使用像 OUTER 这样的额外词可以确保其他阅读代码的人更容易理解它。歧义会减少。这种风格对于将来必须维护该代码的人来说更具可读性和友好性。
【讨论】:
【参考方案3】:其实它们是一样的。 LEFT OUTER JOIN
与 LEFT JOIN
相同,RIGHT OUTER JOIN
与 RIGHT JOIN
相同。从INNER Join
进行比较会提供更多信息。
详情请参阅Wikipedia article。
【讨论】:
完美,谢谢。我遇到的很多教程都根据自己的风格使用它们,而没有注意它们是相同的。 连接的可视化表示:codeproject.com/Articles/33052/…以上是关于全外连接与全连接的主要内容,如果未能解决你的问题,请参考以下文章