考虑下面的简化SQL查询,在Oracle数据库环境中(虽然我不确定它是否特定于Oracle):
SELECT
t0.foo, t1.bar
FROM
FIRST_TABLE t0, SECOND_TABLE t1
WHERE
t0.ID (+) = t1.ID;
(+)
条款中的WHERE
符号是什么?如果这是一个无知的新手问题,我很抱歉,但是在Google或StackOverflow上搜索非常非常 ...因为即使使用引号,搜索引擎也会看到“+”符号,似乎想把它当作某种逻辑指令。
答案 0 :(得分:58)
这是外部联接的Oracle特定表示法。这意味着它将包含来自t1的所有行,如果t0中没有相应的行,则在t0列中使用NULLS。
在标准SQL中,人们会写:
SELECT t0.foo, t1.bar
FROM FIRST_TABLE t0
RIGHT OUTER JOIN SECOND_TABLE t1;
Oracle recommends not to use those joins anymore if your version supports ANSI joins (LEFT/RIGHT JOIN):
Oracle建议您使用FROM子句OUTER JOIN语法而不是Oracle join运算符。使用Oracle连接运算符(+)的外连接查询受以下规则和限制[...]
的约束