新人SEのためのSQL 外部結合
Outer Join で注意すべき3つの点
SQLを書くようになって、割と最初に引っかかりやすいのが『外部結合』ではないでしょうか? この記事では、『外部結合( outer join )』について解説したいと思います。
JOINの種類は全部で5つ
JOINの種類は全部で5つ。以下の図を参照してください。
この記事で取り上げるのは、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 )