2012-08-17 79 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

相關問題