(+)相当于(+)。
在Oracle中,(+)表示JOIN中的“可选”表。 所以在你的第一个查询中,它是一个(+).在你的第二个查询中,它是(+)。它们在功能上是等价的。
在术语中,RIGHT或LEFT指定连接的哪一侧始终具有记录,而另一侧可能为空。 所以在(+)中,(+)将始终有记录,因为它位于(+),但S可能为空。
有关其他说明,请参阅java2s.com中的此示例。
为了澄清,我想我说这个术语并不重要,因为它只是帮助可视化。 重要的是你了解它的工作原理。
右与左
我已经看到在隐式连接语法中确定RIGHT vs LEFT的重要性时会有些困惑。
LEFT OUTER JOIN
SELECT *
FROM A, B
WHERE A.column = B.column(+)
正确加入
SELECT *
FROM A, B
WHERE B.column(+) = A.column
我所做的只是在WHERE子句中交换术语的两侧,但它们在功能上仍然是等价的。 (有关详细信息,请参阅我的答案中的更高位置。)(+)的位置确定RIGHT或LEFT。 (具体来说,如果(+)位于右侧,则为LEFT JOIN。如果(+)位于左侧,则为右侧加入。)
JOIN的类型
JOIN的两种样式是隐式JOIN和显式JOIN。 它们是编写JOIN的不同风格,但它们在功能上是等价的。
看到这个问题。
隐式JOIN只是将所有表一起列出。 连接条件在WHERE子句中指定。
隐含的JOIN
SELECT *
FROM A, B
WHERE A.column = B.column(+)
显式JOIN将连接条件与特定表的包含关联,而不是在WHERE子句中。
明确的加入
SELECT *
FROM A
LEFT OUTER JOIN B ON A.column = B.column
这些隐式JOIN可能更难以阅读和理解,并且它们也有一些限制,因为连接条件在其他WHERE条件中混合。 因此,通常建议使用隐式JOIN来支持显式语法。