我有以下查询
SELECT *
FROM tableA, tableB
WHERE Conditions [+]
此关键字条件[+]代表什么? 此查询如何作为外部联接?
答案 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
这是一个解释了很多这些内容的教程:
答案 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 列。