【问题标题】:What does a (+) sign mean in an Oracle SQL WHERE clause? [duplicate]Oracle SQL WHERE 子句中的 (+) 符号是什么意思? [复制]
【发布时间】:2011-05-12 03:56:42
【问题描述】:

可能重复:
Oracle: What does (+) do in a WHERE clause?

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

SELECT 
   t0.foo, t1.bar
FROM
   FIRST_TABLE t0, SECOND_TABLE t1
WHERE
   t0.ID (+) = t1.ID;

WHERE 子句中的 (+) 表示法是什么?如果这是一个无知的新手问题,我很抱歉,但在 Google 或 StackOverflow 上搜索它非常非常......因为即使使用引号,搜索引擎也会看到一个“+”号和似乎想把它当作某种逻辑指令。

【问题讨论】:

  • 很公平。我会投票删除...虽然由于它现在已经关闭,显然我必须等待 2 天才能这样做(其中一些 Stack Overflow 程序对我来说是零意义)。
  • 呃。 Stack Overflow 告诉我,我必须等待 2 天才能投票删除,因为一些愚蠢的原因没有什么意义。我等待,然后它告诉我我无法删除,因为答案或赞成票太多。但是,这两天回答和点赞的数量并没有变化……所以它本来可以这么说的!无论如何,我们有一个重复的问题......我想,忍受它。难怪这个网站会给出各种基本使用的“奖牌”。用户应得的!
  • 我在 Oracle 的 SQL 查询中寻找这些 (+) 的含义。并且无法使用 Google 搜索 (+)。我前往 Stack Overflow,Stack Overflow 的搜索引擎给了我 (+) 的零结果。这是错误的。 Stack Overflow 上至少有两个关于(+) 含义的问题。改正搜索引擎就好了。

标签: sql oracle


【解决方案1】:

这是 Oracle 特定的外连接表示法。这意味着它将包含 t1 中的所有行,如果 t0 中没有对应的行,则在 t0 列中使用 NULLS。

在标准 SQL 中可以这样写:

SELECT t0.foo, t1.bar
  FROM FIRST_TABLE t0
 RIGHT OUTER JOIN SECOND_TABLE t1;

甲骨文recommends not to use those joins anymore if your version supports ANSI joins (LEFT/RIGHT JOIN):

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

【讨论】:

  • +1 可能值得一提的是,最近的 Oracle 版本(我认为是 10g 以上)支持 SQL-92 语法,它允许显式指定外连接(而不是使用旧版 (+) 运算符) .
  • @Mark Ba​​nnister:8i 有一些,但在 9i 中很容易访问。
  • 最后,这对谷歌来说是一个痛苦。
  • 抱歉迟到了。加号出现在条件的右侧或左侧是什么意思?
  • 有趣的是,这已经被接受了这么久。根据答案中链接到的 Oracle 文档,“要编写执行表 A 和 B 的外连接并返回 A 中的所有行(左外连接)的查询,请在 FROM 子句中使用 LEFT [OUTER] JOIN 语法, 或在 WHERE 子句的连接条件中对 B 的所有列应用外连接运算符 (+)。对于 A 中的所有行,B 中没有匹配的行,Oracle 数据库对任何包含 B 列的选择列表表达式返回 null 。”似乎 Benoit 颠倒了他在她/他的回答中描述的加入。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-09
  • 1970-01-01
  • 1970-01-01
  • 2021-11-16
  • 2011-06-05
  • 1970-01-01
相关资源
最近更新 更多