理解使用(+)函数' IS NULL'表达

时间:2014-08-07 08:37:44

标签: sql oracle

我知道(+)函数的用途以及如何使用'where a(+)=b'这样的表达式。我不明白使用(+)函数来使用' IS NULL'表达

  

其中table.valid_end_date(+)IS NULL

2 个答案:

答案 0 :(得分:2)

(+)是“Operator”,表示“前一列是连接中的外连接列。”

它不是一个函数,它不带参数,不(本身)返回任何值,你不能在select子句中使用它进行计算。它只是Oracle特定语法的一项,表示外连接。

因此,在形成外连接时,您必须将此(+)运算符应用于该连接的所有部分(否则它不再是外连接)

,所以where table.valid_end_date(+) IS NULL只是意味着table已被外连接(并且要求字段valid_end_date为空)

答案 1 :(得分:1)

(+)是一种旧的,特定于Oracle的编写left join的方法。因此,当您编写col1(+) is null时,您正在向left join添加条件。该条件表示仅匹配col1null的行。

以下是一个示例查询:

select  *
from    customers c
,       orders o
where   o.customer_id(+) = c.id
        and o.dt(+) is null

正如您在SQL Fiddle所看到的,每个客户都会返回:

  • 所有现有订单null日期
  • 如果客户没有null日期的任何订单,则会生成包含所有null列的单个行

等效的新语法查询是:

select  *
from    customers c
left join
        orders o
on      o.customer_id = c.id
        and o.dt is null

我个人认为后面的语法更加清晰。