SQLを扱う上で、複数のデータテーブルから欲しいデータを抽出することは基本だと思います。
今回は、SQLの基本であるテーブル結合の種類と使い方についてご紹介します。
目次
- 結合とは
- 結合の種類
- Inner Join
- Left Outer Join
- Right Outer Join
- Full Outer Join
- Cross Join
- 結合にあたって
- まとめ
結合とは
SQLにおける結合は、その名の通り、複数のテーブルを結合して1つのデータテーブルとして抽出することです。
実際のSQLでは、多くのテーブルからデータを抜き出して1つのテーブルを抽出しますが、基本となるのは2つのテーブルを1つに結合するものになります。
例えば、売上データと会員データがあり、売上と会員の行動がどのように関連しているかを調べたいとします。
このような場合に、2つのデータテーブルを結合することで、1つのデータテーブルとして見ることができるようになります。
ここで、結合するための基本的なSQL文について紹介します。
from テーブル1
結合の種類 テーブル2
on 共通の条件(テーブル1.* = テーブル2.*)
SQL文の構造として、from句の後に結合条件を記載することになります。
この場合、共通の条件において、テーブル1にテーブル2を結合することを示しています。
結合はSQLにおける基礎になるため、理解を深めていきましょう。
結合の種類
ここで、SQLにおけるデータ結合の種類を紹介します。
結合には、Inner Join、Left Outer Join、Right Outer Join、Full Outer Join、Cross Join、の5種類の結合方法があります。
これらの結合方法は、結合するために共通の値が必要な方法と共通の値を必要としないCross Joinの2つに大きく分けられます。
下記の図では、共通の値が条件として必要となる、4種類の結合の違いを示しています。
Cross Joinも含めて、それぞれの特徴について見ていきましょう。
Inner Join
Inner Joinは、内部結合と呼ばれ、結合する2つのテーブルの中で、条件に指定した共通の値に合致するデータのみを結合します。
そのため、2つのテーブルで共通する値に対応するデータだけが抽出され、条件以外のデータは表示されません。
from table1
inner join table2
on table1.id = table2.id
上記がInner JoinのSQL文になります。
この場合では、2つのテーブルに共通するidだけが抽出されています。
Left Outer Join
Left Outer Joinは、外部結合の1つであり、左側のテーブルのデータを全て取り出し、右側のデータからは条件に指定した共通の値に合致するデータのみを結合します。
結合における左側のテーブルはデータを結合される側のことを指します。
つまり、元のテーブルのデータはそのまま表示し、結合するテーブルの中から共通するデータを抜き出して結合するということになります。
from table1
left outer join table2
on table1.id = table2.id
上記がLeft Outer JoinのSQL文になります。
この場合では、table1のidに従ってデータが抽出されているため、table2に存在しないデータに関してはnullで表記されます。
Right Outer Join
Right Outer Joinは、Left Outer Joinの反対の外部結合になります。
Right Outer Joinは、外部結合の1つであり、右側のテーブルのデータを全て取り出し、左側のデータからは条件に指定した共通の値に合致するデータのみを結合します。
つまり、結合するテーブルのデータはそのまま表示し、元のテーブルと共通するデータを抜き出して結合することになります。
from table1
right outer join table2
on table1.id = table2.id
上記が、Right Outer JoinのSQL文になります。
この場合では、table2のidに従ってデータが抽出されているため、table1に存在しないデータに関してはnullで表記されます。
Full Outer Join
Full Outer Joinは、外部結合の1つであり、条件を指定して2つのテーブルを結合しますが、2つのテーブルのすべてのデータを抽出することになります。
from table1
full outer join table2
on table1.id = table2.id
上記が、Full Outer JoinのSQL文になります。
この場合では、table1,2どちらのデータも抽出されており、対応していないデータに関してnullで表記されている。
Cross Join
Cross Joinは、交差結合と呼ばれ、内部結合・外部結合と結合方法が全く別になります。
Cross Joinでは、2つのテーブルの行の全ての組み合わせが表示されます。
つまり、2行のテーブルと3行のテーブルを結合した場合、6行のデータが抽出されます。
また、集合関数などを用いて1行だけのデータを抽出した場合、Cross Joinを用いることで、全ての行に1つのデータを結合することができます。
そのため、全体平均との比較をしたい場合などは、利用できる方法になると思われます。
from table1
cross join table2
上記がCross JoinのSQL文になります。
これまでの結合とは大きく異なる点が1点あります。
Cross Joinでは条件を指定する必要がないため、条件句を記載しません。
そのため、上記の図は、table1,2をCross Joinしたものであり、3行×4行の12行のデータが抽出されています。
結合するにあたって
実際のSQLでは、2つのテーブルだけを結合することは少なく、複数のテーブルを結合することが一般的になります。
そのため、抽出したいデータを絞り込むためには、結合する順番と条件に気をつける必要があります。
結合の順番では、テーブルごとのデータを把握し、共通の値があるかどうか確認し、結合の種類も内部結合または外部結合のどちらを用いるかを、工夫しながら決める必要があります。
結合の条件では、まず共通の値をしっかりと設定する必要があります。
また、共通の値だけでなく、別の条件を設定することも可能であるため、結合の段階でデータを絞り込むことも可能になります。
まとめ
今回はSQLにおける結合について紹介しました。
テーブルを結合することによって、複雑なデータであっても抽出することが可能になるため、結合の種類や条件を使いこなす事ができるようになるとデータの幅が広がります。
結合の違いを利用して、データ分析に活用してみてはいかがでしょうか