SELECT * FROM tableA,tableB WHERE条件[+]

时间:2012-08-17 15:38:07

标签: sql oracle outer-join full-outer-join

我有以下查询

SELECT * 
FROM tableA, tableB
WHERE Conditions [+]

此关键字条件[+]代表什么? 此查询如何作为外部联接?

4 个答案:

答案 0 :(得分:6)

这是旧的Oracle Join语法。

SELECT * 
FROM tableA, tableB
WHERE Conditions [+] -- this should be tableA (+) = tableB

+符号的定位表示JOIN语法。

如果您查询的是:

SELECT * 
FROM tableA, tableB
WHERE tableA.id (+) = tableB.Id

然后它将显示RIGHT OUTER JOIN,因此等价物是:

SELECT * 
FROM tableA
RIGHT OUTER JOIN tableB
   ON tableB.id = tableA.Id

如果+标志位于另一侧,那么它将是LEFT OUTER JOIN

SELECT * 
FROM tableA, tableB
WHERE tableA.id  = tableB.Id (+)

相当于

SELECT * 
FROM tableA
LEFT OUTER JOIN tableB
   ON tableA.id = tableB.Id

我建议使用标准连接语法。

如果您未指定+符号,则会将其解释为INNER JOIN

SELECT * 
FROM tableA, tableB
WHERE tableA = tableB

等同于:

SELECT * 
FROM tableA
INNER JOIN tableB
    ON tableA.id = tableB.id

FULL OUTER JOIN将使用两个SELECT语句和一个UNION编写:

SELECT * 
FROM tableA, tableB
WHERE tableA.id  = tableB.Id (+)
UNION
SELECT * 
FROM tableA, tableB
WHERE tableA.id (+) = tableB.Id 

相当于:

SELECT * 
FROM tableA
FULL OUTER JOIN tableB
    ON tableA.id = tableB.id

这是一个解释了很多这些内容的教程:

Old Outer Join Syntax

答案 1 :(得分:3)

表现如何并不重要。您应该使用外连接的标准语法:

select *
from tableA left outer join
     tableB
     on . . .

“(+)”语法是Oracle在标准语法之前引入的,并且它已经过时了。

答案 2 :(得分:0)

'条件'在这里仅表示您用来过滤所有这些数据的内容。

LIke这是一个例子:

SELECT * 
FROM tableA, tableB
WHERE Name like '%Bob%'

将返回内部任何位置都有“Bob”的名称。

关于外连接,实际上你在FROM子句中使用它:

所以也许

SELECT * 
FROM tableA ta 
     OUTER JOIN tableB tb
     ON ta.name = tb.name
WHERE ta.age <> 10

并且这里是可选的,顺便说一下

答案 3 :(得分:0)

我讨厌复制&amp;粘贴答案,但如果你做一点搜索,这类事情可以是found pretty easily ......

  

外连接返回一个表的行,即使没有   匹配另一个中的行。您在Oracle中指定外部联接   在列名后面的括号中加上加号(+)   WHERE子句中的可选表。例如:

SELECT ut.table_name, uc.constraint_name 
FROM user_tables ut, user_constraints uc 
WHERE ut.table_name = uc.table_name(+);
     

uc.table_name之后的(+)使user_constraint表成为可选项。   查询返回所有表,并且没有对应的表   约束记录,Oracle在约束名称中提供null   列。