与+运算符连接

时间:2017-07-17 13:58:05

标签: sql oracle

我有以下查询。

DECLARE @StartDate date = '2017-05-01'

我知道上面的查询是使用tab2连接tab1。但我不明白b.c3(+)是什么意思。请帮我解决这个问题。提前谢谢。

2 个答案:

答案 0 :(得分:3)

您无需了解正在发生的事情。语法已过时,应弃用(SQL Server中不推荐使用类似的语法)。

只需学习将其写为外连接:

Select a.c1, b.c1, a.c2, b.c2
from tab1 a left join
     tab2 b
     on a.c3 = b.c3 and b.c3 = 'abc';

答案 1 :(得分:0)

有趣的问题!您不需要多个表来提问或试用它。

采用SCOTT模式中的EMP表。

select * from emp where deptno = 10
对于部门10中的员工,

将返回三行。

如果我们将其更改为

,我们会得到什么?
select * from emp where deptno(+) = 10

?一种可能性是我们收到错误消息。另一个是 - 类似于外连接的Oracle表示法 - 即使deptno不等于10,我们也会获得EMP行的行。(虽然,实际上,这是错误的期望;当deptno不是10时获取行, (+)应位于右侧 - 导致错误。)

事实上,我们都没有得到这些。相反,(+)被忽略。我们得到的行与以前完全相同。

所以你的猜测是正确的:那个环境中的(+)什么都不做。

只是要非常明确:“上下文”是我们的条件是=并且一边是(+)语法,但另一边是常量表达式 - 条件是不是实际的“加入条件”。