旧样式Oracle外连接语法 - 为什么在左外连接中找到等号右侧的(+)?

时间:2014-03-27 04:58:37

标签: oracle syntax

我总是告诉新人,记住旧式Oracle外连接语法的一种简单方法是

  

(+)标志位于您认为应该在的位置的另一侧。

左连接:

select * from foo, bar
where foo.id = bar.id(+)

右连接:

select * from foo, bar
where foo.id(+) = bar.id

我确定我在大学里学到了这一点,但是在两边都有(+)标志的目的是什么?它是否只是表示“即使另一侧的那些行在这一侧也不匹配”?但那似乎太复杂了。选择“(+)”并将其放在没有匹配的一侧的目的是什么?

2 个答案:

答案 0 :(得分:10)

(+)标识外部加入的表。我教授的方式是,(+)表示该表中缺少必须添加新NULL行的行。

如果查看在LEFT OUTER JOIN成为ANSI标准一部分之前支持的各种数据库的alternate left outer join syntaxes,则专有运算符通常应用于“缺少”行的表。 DB2 also supports the (+) operator for outer joins与Oracle的做法相同。

答案 1 :(得分:-1)

简单...这是一个完整的外部连接。 就是这样,伙计们

这样你就有了一个集合 A 和另一个集合 B 之间的完整连接集:

  • 内部(仅对 A 和 B 通用),
  • left(全部为 A,匹配 B 否则为 null)
  • 正确(全部为 B,匹配 A 否则为 null)
  • 完整(所有 A,所有 B,匹配与否)