我有以下查询
SELECT *
FROM tableA, tableB
WHERE Conditions [+]
这个关键字Condition[+]代表什么?此查询如何作为外连接?
我有以下查询
SELECT *
FROM tableA, tableB
WHERE Conditions [+]
这个关键字Condition[+]代表什么?此查询如何作为外连接?
那是旧的 Oracle Join 语法。
SELECT *
FROM tableA, tableB
WHERE Conditions [+] -- this should be tableA (+) = tableB
符号的位置+
表示JOIN
语法。
如果您查询的是:
SELECT *
FROM tableA, tableB
WHERE tableA.id (+) = tableB.Id
然后它会显示 aRIGHT 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
AFULL OUTER JOIN
将使用两个SELECT
语句和 a编写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
这是一个解释了很多这些的教程:
它的行为方式并不重要。您应该使用外部连接的标准语法:
select *
from tableA left outer join
tableB
on . . .
"(+)" 语法是 Oracle 在标准语法之前引入的,它已经非常过时了。
这里的“条件”仅表示您用于过滤所有这些数据的内容。
就像这里的一个例子:
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
顺便说一下,这里是可选的
我讨厌只是复制和粘贴答案,但是如果您进行一些搜索,就可以很容易地找到这种东西...
外连接返回一个表的行,即使另一个表中没有匹配的行。通过在 WHERE 子句中可选表中的列名后面的括号中放置一个加号 (+),您可以在 Oracle 中指定一个外连接。例如:
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 在约束名称列中提供空值。