完整的外部连接与完全连接

只是玩弄查询和例子,以更好地理解联接。 我注意到,在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 

这些执行完全相同的行动,以产生相同的结果,或者我会碰到一个更复杂的例子不同的结果? 这只是可互换的术语吗?

3 Solutions collect form web for “完整的外部连接与完全连接”

其实他们是一样的。 LEFT OUTER JOINLEFT JOIN相同, RIGHT OUTER JOINRIGHT OUTER JOIN相同。 这是比较INNER Join更多的信息方式。

有关详情,请参阅此维基百科文章 。

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

  • 左外连接或左连接

  • RIGHT OUTER JOIN或RIGHT JOIN

  • 全外连接或全连接

来自MSDN

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

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

这可能会让你想知道:“如果它没有意义,它甚至会成为一个关键词?” 答案归结为编程风格。

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

现代程序员正在学习使用更多的描述性variables,并在代码中join更多的注释和文档。 使用额外的单词如OUTER,确保阅读代码的其他人能够更容易地理解它。 将会有更less的歧义。 这种风格对将来必须维护这些代码的人来说更可读和更友善。

  • 如果指定了SELECT DISTINCT,则ORDER BY项目必须出现在select列表中
  • 如何比较可能都为null的值是T-SQL
  • 如何停止SQLServer写入无关的东西,例如(1行受到影响)
  • 如何在SQL Server数据库中一次性删除所有存储过程?
  • 如何在SQL Server 2005中的一个语句中更新两个表?
  • 如何在T-SQL中的XMLstring中的属性中使用双引号?
  • 创build表时声明一个默认约束
  • SQL Server:检查触发器是启用还是禁用?
  • 在SqlCommand中传递数组参数
  • 在variables中是否存在StartsWith或Contains in t sql?
  • 在存储过程中使用带有dynamicSQL的游标