0

次のクエリがあります

SELECT * 
FROM tableA, tableB
WHERE Conditions [+]

このキーワード Conditions[+] は何を表していますか? このクエリは外部結合としてどのように動作しますか?

4

4 に答える 4

6

これは古い Oracle Join 構文です。

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

+記号の位置はJOIN構文を示します。

クエリが次の場合:

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

次に、 a が表示される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

Aは、2 つのステートメントと aFULL OUTER JOINを使用して記述されます。SELECTUNION

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

これらの多くを説明するチュートリアルは次のとおりです。

古い外部結合構文

于 2012-08-17T15:46:10.270 に答える
3

それがどのように動作するかは重要ではありません。外部結合には標準の構文を使用する必要があります。

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

「(+)」構文は、標準構文の前にOracleによって導入されたものであり、非常に古くなっています。

于 2012-08-17T15:40:58.367 に答える
0

ここでの「条件」とは、このすべてのデータをフィルタリングするために使用しているものを意味します。

ここに例があります:

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

ちなみに、ここはオプションです

于 2012-08-17T15:40:33.377 に答える
0

コピペするのは苦手なのですが、ちょっと検索すれば結構簡単に出てきますよね…

外部結合は、一致する行が他のテーブルにない場合でも、1 つのテーブルの行を返します。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 を指定します。

于 2012-08-17T15:42:57.743 に答える