2012-08-17 144 views
0

我有以下查询SELECT * FROM表A,tableB的WHERE条件[+]

SELECT * 
FROM tableA, tableB 
WHERE Conditions [+] 

这是什么关键字条件[+]代表? 这个查询如何表现为外连接?

+3

您发布的查询似乎没有什么意义。鉴于你对“外连接”的引用,你可能是指'WHERE tableA.col1 = tableB.col1(+)'? – 2012-08-17 15:41:25

+0

我使用标准SQL从事MS-SQL工作。我从来没有见过这种语法。这只是外连接的例子。我想知道它如何写在标准的SQL。 – wali 2012-08-17 15:49:02

回答

6

这就是老甲骨文加入的语法。

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

+0

@blueefeet我们如何使用oracle旧语法来编写完整的外连接? – wali 2012-08-17 15:54:38

+0

@wali请参阅我的编辑。 – Taryn 2012-08-17 15:58:52

+0

非常感谢。现在我完全了解它。 – wali 2012-08-17 16:02:17

0

“条件”在这里只是意味着你使用过滤所有这些数据是什么。

喜欢这里有一个例子:

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

都将返回一个具有“鲍勃”内任何地方的名字。

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

所以也许

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

而且这里哪里是可选的,顺便

+1

感谢您的信息。但我想知道它的行为如何, 左外连接,或 右外连接或 完全外连接?或 – wali 2012-08-17 15:43:08

3

并不重要这是如何表现的。

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

的“(+)”的语法被甲骨文标准语法出台之前,它是非常过时的:对于外连接,您应该使用标准的语法。

0

我不想只是复制粘贴&的答案,但这样的事情可以found pretty easily,如果你做了一些搜索...

的外部联接返回行的一个表,即使有没有 匹配另一行中的行。您指定 在甲骨文外连接将在后面的括号从 可选表中的列名的加号(+),您的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表可选。 查询返回的所有表,在没有相应的约束 记录,甲骨文在约束名称 列提供了一个空。

+0

我试过,但无法找到任何这样的关键字[+]。感谢您的支持。 – wali 2012-08-17 15:56:22

相关问题