1. ホーム
  2. sql

[解決済み] オラクル「(+)」。演算子

2022-04-20 19:48:49

質問

古いSQLステートメントをドキュメント化するため、またおそらくそれらを強化するためにチェックしています。

DBMSはOracleです。

このような文章は理解できませんでした。

select ...
from a,b
where a.id=b.id(+)

について混乱しています。 (+) 演算子について、どこのフォーラムに行っても教えてもらえませんでした...。(引用符で囲まれた+を検索してもうまくいきませんでした)。

とにかく、SQLDeveloperの'Explain Plan'を使ってみたら、次のように出力されました。 HASH JOIN, RIGHT OUTER などです。

を削除した場合、何か違いがあるのでしょうか? (+) 演算子をクエリの末尾に追加してください。データベースが何らかの条件(例えばインデックスを持つなど)を満たしてから (+) は使えるのでしょうか?簡単な理解や、この件について読める良いリンクなどを教えていただけると大変助かります。

ありがとうございます。

解決方法は?

ANSI-89形式(FROM句でカンマを使用してテーブル参照を分離)ではOUTER JOINが標準化されていなかったため、これはOracle固有のOUTER JOINの表記法です。

このクエリは、ANSI-92構文で次のように書き直されます。

   SELECT ...
     FROM a
LEFT JOIN b ON b.id = a.id

このリンクは、JOINの違いを説明するのにかなり適しています。 .


また、注意すべきは、たとえ (+) が動作します。 オラクルの推奨する ない 使用 :

オラクルでは FROMOUTER JOIN の構文を使用し、Oracle 結合演算子ではありません。Oracle 結合演算子を使用する外部結合クエリ (+) には適用されませんが、以下の規則と制約に従います。 FROMOUTER JOIN の構文があります。