完全外部加入与完全加入

时间:2012-07-30 02:58:27

标签: sql sql-server-2008 tsql join

只需使用查询和示例来更好地了解联接。我注意到在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 个答案:

答案 0 :(得分:80)

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

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

答案 1 :(得分:27)

  

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

     
      
  • LEFT OUTER JOIN或LEFT JOIN

  •   
  • RIGHT OUTER JOIN或RIGHT JOIN

  •   
  • 全部加入或全部加入

  •   

来自MSDN

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

答案 2 :(得分:8)

某些数据库识别OUTER关键字是对的。有些人没有。 在识别的位置,通常是可选关键字。 几乎总是,FULL JOIN和FULL OUTER JOIN做同样的事情。 (我不能想到他们没有的例子。其他人可以想到吗?)

这可能会让你感到疑惑,"为什么它甚至不是一个关键词,如果它没有意义?"答案归结为编程风格。

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

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

答案 3 :(得分:1)

删除TableA.name = TableB.name上的内容,您将看到笛卡尔积。