SQL:WHERE句内で「(+)」を指定する意味

  • URLをコピーしました!

SQLを見てるとたまにWHERE句内で「(+)」と記載されているのを見かけることがあります。

この「(+)」はOracle独自で記載が可能となる外部結合演算子といって、「g.GOODS_CODE = gt.GOODS_CODE(+)」のように指定するとLEFT OUTER JOINと同じ結果を取得することが出来ます。

目次

サンプルテーブル

  • 「GOODS」テーブル
  • 「GOODS_TYPE」テーブル

外部結合演算子を利用したクエリー(SQL)例

通常の左外部結合でのクエリー(SQL)例

実行結果

外部結合演算子、左外部結合どちらも同じ結果となります。

補足

  • 「(+)」演算子の歴史的背景
    Oracle の古いバージョンからサポートされていた外部結合の書き方で、ANSI SQL 標準が普及する以前によく使われていました。ANSI 標準(LEFT JOIN / RIGHT JOIN / FULL OUTER JOIN)が登場して以降は、可読性・移植性の観点から推奨されないことが多いです。


  • 制限・注意点

  • ANSI 標準との違い

    項目 (+) 外部結合演算子 ANSI SQL 外部結合 (LEFT OUTER JOIN 等)
    可読性やや分かりにくい比較的分かりやすい
    移植性Oracle に依存多くの RDBMS でサポートされる
    複雑な JOIN の組み立てエラーや誤解の元になりやすいON 句で明示的に指定できるため制御しやすい
    サポート状況最新 Oracle でも非推奨の方向推奨される方式
     

  • 現代のベストプラクティス

  • 互換性・移行のヒント

よくある質問(Q & A)

WHERE句の「(+)」は何を意味しますか?

「(+)」は Oracle独自の外部結合指定です。
(+) を付けた側のテーブルに一致するデータがなくても、結果に含めます。

「(+)」は LEFT JOIN と同じ意味ですか?

はい。次の2つは同じ意味です。

WHERE A.ID = B.ID(+)
LEFT OUTER JOIN B ON A.ID = B.ID

現在は JOIN ... ON 構文の使用が推奨されています。

「(+)」はなぜ使わない方がよいのですか?

「(+)」は Oracle専用の古い記法で、
・読みづらい
・他DBでは動かない
という欠点があります。
そのため、標準SQLの JOIN 構文に書き換えるのが望ましいです。

よかったらシェアしてね!
  • URLをコピーしました!
0 0
Article Rating
申し込む
注目する
guest
0 コメント一覧
最も古い
最新 高評価
インラインフィードバック
すべてのコメントを見る
目次