次のクエリがあります
SELECT *
FROM tableA, tableB
WHERE Conditions [+]
このキーワード Conditions[+] は何を表していますか? このクエリは外部結合としてどのように動作しますか?
次のクエリがあります
SELECT *
FROM tableA, tableB
WHERE Conditions [+]
このキーワード Conditions[+] は何を表していますか? このクエリは外部結合としてどのように動作しますか?
これは古い 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
を使用して記述されます。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
これらの多くを説明するチュートリアルは次のとおりです。
それがどのように動作するかは重要ではありません。外部結合には標準の構文を使用する必要があります。
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
ちなみに、ここはオプションです
コピペするのは苦手なのですが、ちょっと検索すれば結構簡単に出てきますよね…
外部結合は、一致する行が他のテーブルにない場合でも、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 を指定します。