内部結合・外部結合とは
更新日 : 2019年06月17日
リレーショナルデータベースではテーブルの情報を結合して、1つのテーブルの情報のように取得できます。
内部結合では、2つのテーブルにおいて両方存在しているレコードのみを取得します。
外部結合では、片方のテーブルを確実に取得し、もう片方のテーブルは取得できるデータだけを取得します。取得できなければあなぬけの部分がNULLとなります。
テーブルの結合とは
まずは結合がどのようなものかを見ていきます。リレーショナルデータベースとはで説明した表を使って説明します。
上の図のようにユーザー情報を格納するテーブルと住所情報を格納するテーブルを考えてみます。
2つのテーブルで共通の番号であるユーザー番号を見ていくと、まず、ユーザー情報テーブルでは、佐藤太郎さんはユーザー番号00001となっています。
そして住所情報テーブルでは、ユーザー番号00001のデータが2つはいっています(自宅用・職場用)。
つまり、住所情報テーブルにある00001番のユーザー番号は佐藤太郎さんの住所を表していることがわかります。
このとき、佐藤太郎さんの電話番号と住所情報をまとめて取得したい場合、テーブルごとに2回取得するのは手間です。そこでリレーショナルデータベースのテーブル結合をおこないます。
ユーザー番号は2つのテーブルで共有している番号なので、ユーザー情報のユーザー番号と住所情報のユーザー番号が一致しているデータをまとめて取得することができます。その際に、リレーショナルデータベースでは2つのテーブルを1つのテーブルかのようにくっつけ、くっつけた上で欲しいデータを取得することができます。この擬似的にテーブルをくっつけてデータを取得することを結合と言います。
その結合の際の条件は大まかに2種類存在します。
結合の条件
2つの結合条件である内部結合と外部結合を説明するにあたって、以下のテーブルを考えてみましょう。
商品テーブルと商品の種別が保存されている種別テーブルがあります。
商品テーブルにある種別idが、種別テーブルの種別idと紐づく形です。
内部結合とは
まずは内部結合です。内部結合は以下のイメージを持ってください。
左のテーブルである商品テーブルと、右のテーブルである種別テーブルの共通部分のみを抽出するのが内部結合です。イメージ的にも内部という言葉の意味がわかるかと思います。
内部結合を利用して左右のテーブルを結合した結果が以下のような表になります。
これを見ると商品idが3番のカメラと、種別名である家具が表示されていません。
左右のテーブルどちらかがかけているレコードは取得されません。つまりどちらにもデータがある状態のレコードが取得されます。これが内部結合です。
外部結合とは
次に外部結合です。外部結合は以下のようなイメージを持ってください。
左のテーブルではすべての情報を取得しつつ、右のテーブルで条件が一致すれば右のテーブルの情報も取得します。この上の図の状態を左外部結合と言います。
逆に右のテーブルをもとに結合するものを右外部結合と言います。
やっていることはどちらを基本のテーブルとするかだけです。
左外部結合の例
先程の商品テーブルを左のテーブルとして左外部結合した例を見てみます。
左のテーブル(商品テーブル)情報はすべて取得できています。カメラのレコードに注目すると、カメラの種別名がNULLとなっています。このNULLは、何もないという意味です。カメラの種別idが種別テーブルに存在しないidであるため、取得できないデータが有った場合にはNULLとなります。
右外部結合の例
続いて右外部結合を見ていきます。右を基準とするので、種別テーブルの情報はすべて取得できます。
今度は家具種別の商品が存在しないため、家具種別のレコードを取得する際には、商品情報がNULLになります。
まとめ
内部結合・外部結合について説明していきました。内部結合に関しては、左右のテーブル両方存在している情報のみを取得するためそんなに難しくないかと思います。
外部結合に関しては、どちらのテーブルを基準として結合するのかを意識して、取得したい情報を確実に取得できるかどうかを考えながらSQLを実行する必要があります。