【SQL】やりがちな外部結合のミスや誤り

ここではORACLEデータベースのSQLで、やりがちな外部結合のミスや誤りについて紹介しています。

外部結合のミスのサンプル

ORACLEのSQLでは、JOINの他にも結合条件の列名の後ろに(+)を使って外部結合をすることが出来ました。

(+)で外部結合をするときに、やりがちなミスがあります。
次のSQLでは外部結合をしているように見えますが、実は外部結合になっていません。

select
    a.id
    ,b.div_cd
    ,b.div_nm
from
    table1 a
    ,table b
where
    a.div_cd = b.div_cd(+)
    and b.div_cd = '100'
;

上記のSQLでは「and b.div_cd = ‘100’」となっています。
これが下のSQLのように「and b.div_cd(+) = ‘100’」でないと外部結合にはなりません。

select
    a.id
    ,b.div_cd
    ,b.div_nm
from
    table1 a
    ,table b
where
    a.div_cd = b.div_cd(+)
    and b.div_cd(+) = '100'
;

外部結合のミスの見つけ方

SQLの外部結合されているかどうかは、実行計画を見ると簡単に見つけられます。

実行計画を確認し、OUTER JOINになっていれば外部結合です。

実行計画ではOUTERと出るのは外部結合のときなので、これを目印にチェックをしましょう。

まとめ

SQLの外部結合は(+)の付け忘れによって発生しやすい。

外部結合のミスをチェックするのは、実行計画でOUTER JOINになっていることを確認する。

この他にも、SELECT文には様々な機能や使い方があります。
詳しくは「【SQL】SELECT文の書き方:サンプル多数あり」で解説していますのでぜひ参考にしてください。