情况
执行以下查询时,得到相同数量的记录,我想知道(+)
在查询末尾使用 a 有什么区别。
SELECT A.IDTABLAA,B.NOMBRETABLAB
FROM TABLA_A A, TABLA_B B
WHERE A.IDTABLAA=B.IDTABLAB
--记录数:2,265
SELECT A.IDTABLAA, B.NOMBRETABLAB
FROM TABLA_A A, TABLA_B B
WHERE A.IDTABLAA=B.IDTABLAB(+)
--记录数:2,265
环境
- 数据库:Oracle 11g
运算符
(+)
表示将执行 OUTER JOIN,具体取决于运算符的位置。OUTER JOIN 返回满足指定条件的所有行,加上一个表中的 0 或多个在另一个表中没有匹配的行。要执行 a
LEFT OUTER JOIN
,运算符必须出现在右侧的表格中:在您的表的特定情况下,正在执行 a
LEFT OUTER JOIN
,因此结果将是满足条件的所有行以及不匹配JOIN
的行。A.IDTABLAA
要执行 a
RIGHT OUTER JOIN
,运算符必须出现在左侧的表格中:还必须考虑以下限制:
(*)
在子句中使用WHERE
JOIN
必须对 all 使用运算符JOIN
。WHERE
如果出现在子句(*)
中,则不能用AND
or运算符与其他条件组合OR
。这是一个仅限 Oracle 的运算符,因此如果您想将此代码移植到其他一些 RDBMS,建议使用
OUTER JOINS
.LEFT OUTER JOIN
这是标准化之前的旧 Oracle 语法与当前语法等效的是:
不同之处在于,使用
LEFT OUTER JOIN
( 或 (+) 右侧=
的WHERE
) 表的所有行都包含在结果中,A
即使它们在表中没有对应关系,在这种情况下B
将 aNULL
作为值。