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

Mat*_*sen 8 oracle syntax

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

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

左连接:

select * from foo, bar
where foo.id = bar.id(+)
Run Code Online (Sandbox Code Playgroud)

正确加入:

select * from foo, bar
where foo.id(+) = bar.id
Run Code Online (Sandbox Code Playgroud)

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

Jus*_*ave 11

的(+)标识正在外表接合.我被教导的方式,(+)表示将缺少NULL必须添加新行的行的表.

如果您查看之前支持的各种数据库的备用左外连接语法LEFT OUTER JOIN成为ANSI标准的一部分,则专有运算符通常应用于"缺少"行的表. DB2也(+)以与Oracle相同的方式支持外连接的运算符.