Oracle SQL WHERE子句中的(+)符号意味着什么?

Ste*_*ins 65 sql oracle

可能重复:
Oracle:(+)在WHERE子句中做什么?

在Oracle数据库环境中考虑下面的简化SQL查询(虽然我不确定它是否特定于Oracle):

SELECT 
   t0.foo, t1.bar
FROM
   FIRST_TABLE t0, SECOND_TABLE t1
WHERE
   t0.ID (+) = t1.ID;
Run Code Online (Sandbox Code Playgroud)

(+)WHERE条款中的符号是什么?如果这是一个无知的新手问题,我很抱歉,但是在Google或StackOverflow上搜索非常困难......因为即使使用引号,搜索引擎也会看到一个"+"符号,似乎想把它视为某种逻辑指令.

Ben*_*oit 61

这是外部联接的特定于Oracle的表示法.这意味着它将包括来自t1的所有行,并且如果t0中没有对应的行,则在t0列中使用NULLS.

在标准SQL中,人们会写:

SELECT t0.foo, t1.bar
  FROM FIRST_TABLE t0
 RIGHT OUTER JOIN SECOND_TABLE t1;
Run Code Online (Sandbox Code Playgroud)

如果您的版本支持ANSI连接(LEFT/RIGHT JOIN), Oracle 建议不要再使用这些连接:

Oracle建议您使用FROM子句OUTER JOIN语法而不是Oracle join运算符.使用Oracle连接运算符(+)的外连接查询受以下规则和限制的约束[...]

  • +1可能值得一提的是,Oracle的最新版本(我认为10g以上)支持SQL-92语法,它允许显式指定外连接(而不是使用传统(+)运算符). (2认同)
  • @Mark Ba​​nnister:8i有一些,但在9i很容易获得. (2认同)
  • 最后,这对Google来说是一个痛苦。 (2认同)