新人SEのためのSQL 外部結合

Outer Join で注意すべき3つの点

SQLを書くようになって、割と最初に引っかかりやすいのが『外部結合』ではないでしょうか? この記事では、『外部結合( outer join )』について解説したいと思います。

JOINの種類は全部で5つ

JOINの種類は全部で5つ。以下の図を参照してください。

画像に alt 属性が指定されていません。ファイル名: 20211202-5つのjoin-1024x576.png

この記事で取り上げるのは、outer joinです。
Left outer join、Right outer join 、Full outer joinの3種類があります。
それぞれがどういうものかは、上の図を見れば理解できると思います。
3種類ありはしますが、実際に使うのは99%がLeft outer join ではないかと思います。

Outer Join で注意すべき点は3つです。

・3つ以上のテーブルが絡むときの書き方
・外部結合先のテーブルに対して、固定値の条件を指定する時
・外部結合先のテーブルの項目はNULLを意識する必要がある

3つ以上のテーブルが絡むときの書き方

テーブルが2つの時は迷いはありません。問題は3つ以上の時です。
[親1人子2人]なのか、[親-子-孫]なのか、きちんとイメージする必要があります。

上の図を見て下さい。上のクエリーと下のクエリーは赤字のONの箇所のみの違いです。結果も似ていますが、構造は異なります。

外部結合先のテーブルに対して、固定値の条件を指定する時

JOIN のON句とWHERE句のどちらに書くかで結果は大きく異なりますWHERE句に記載すると、外部結合で結合された状態に対して絞り込みが発生します。

外部結合先のテーブルの項目はNULLを意識する必要がある

外部結合は、結合先のテーブルに該当の行がなかったとしても、行が返されます。その場合、その項目はNULLとなります。したがって、その項目に対して、「=」や「<>」を指定しても正しい結果は返りません。

NULLなので当然ですが、ウッカリしがちなところなので注意してください。

という事で、外部結合で注意すべきことになります。

(2021.12.02 )

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA