首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Oracle "(+)“运算符

Oracle "(+)“运算符
EN

Stack Overflow用户
提问于 2010-10-26 12:51:14
回答 3查看 254.3K关注 0票数 180

我正在检查一些旧的SQL语句,目的是记录它们,可能还会增强它们。

DBMS为Oracle

我不理解这样的陈述:

代码语言:javascript
复制
select ...
from a,b
where a.id=b.id(+)

我对(+)操作符感到困惑,在任何论坛上都找不到它……(在引号内搜索+也不起作用)。

不管怎样,我使用了SQLDeveloper的“解释计划”,我得到了一个输出,上面写着HASH JOIN, RIGHT OUTER等。

如果我删除查询末尾的(+)操作符,会有什么不同吗?数据库是否必须满足某些条件(如具有某些索引等)在使用(+)之前??这将是非常有帮助的,如果你能提供我一个简单的理解,或一些很好的链接,我可以读到这一点。

谢谢!

EN

回答 3

Stack Overflow用户

发布于 2017-10-30 13:48:03

在Oracle中,(+)表示联接中的“可选”表。因此,在您查询中,

代码语言:javascript
复制
SELECT a.id, b.id, a.col_2, b.col_2, ...
FROM a,b
WHERE a.id=b.id(+)

这是表'b‘到表'a’的左外部联接。当另一端(可选表'b')没有数据时,它将返回表'a‘的所有数据而不会丢失其数据。

相同查询的现代标准语法为

代码语言:javascript
复制
SELECT  a.id, b.id, a.col_2, b.col_2, ...
FROM a
LEFT JOIN b ON a.id=b.id

或者使用a.id=b.id的简写(并非所有数据库都支持):

代码语言:javascript
复制
SELECT  a.id, b.id, a.col_2, b.col_2, ...
FROM a
LEFT JOIN b USING(id)

如果删除(+),则它将是普通的内连接查询

较旧的语法,在Oracle和其他数据库中:

代码语言:javascript
复制
SELECT  a.id, b.id, a.col_2, b.col_2, ...
FROM a,b
WHERE a.id=b.id

更现代的语法:

代码语言:javascript
复制
SELECT  a.id, b.id, a.col_2, b.col_2, ...
FROM a
INNER JOIN b ON a.id=b.id

或者简单地说:

代码语言:javascript
复制
SELECT  a.id, b.id, a.col_2, b.col_2, ...
FROM a
JOIN b ON a.id=b.id

它将只返回'a‘和'b’表'id‘值相同的所有数据,表示公共部分。

如果您想使查询成为右连接

这与LEFT JOIN相同,但切换哪个表是可选的。

旧Oracle语法:

代码语言:javascript
复制
SELECT  a.id, b.id, a.col_2, b.col_2, ...
FROM a,b
WHERE a.id(+)=b.id

现代标准语法:

代码语言:javascript
复制
SELECT  a.id, b.id, a.col_2, b.col_2, ...
FROM a
RIGHT JOIN b ON a.id=b.id

参考帮助(&H):

https://asktom.oracle.com/pls/asktom/f?p=100:11:::::P11_QUESTION_ID:6585774577187

Left Outer Join using + sign in Oracle 11g

https://www.w3schools.com/sql/sql_join_left.asp

票数 48
EN

Stack Overflow用户

发布于 2010-10-26 13:28:49

运算符(+)表示外部联接。这意味着即使在没有匹配的情况下,Oracle仍将从连接的另一端返回记录。例如,如果a和b是emp和dept,并且您可以将员工取消分配到某个部门,则以下语句将返回所有员工的详细信息,无论他们是否已分配到某个部门。

代码语言:javascript
复制
select * from emp, dept where emp.dept_id=dept.dept_id(+)

因此,简而言之,删除(+)可能会产生重大差异,但根据您的数据,您可能在一段时间内不会注意到这一点!

票数 30
EN

Stack Overflow用户

发布于 2017-08-03 01:21:45

在实践中,+符号直接放在条件语句中,放在可选表的一侧(允许在条件语句中包含空或空值的表)。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4020786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档