SQLによるデータベースのテーブル結合|内部結合(INNER JOIN)外部結合(OUTER JOIN)の違いも徹底解説

こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!

こんな方におすすめ!
  • SQLを用いたテーブル結合方法について詳しく知りたい
  • 内部結合(INNER JOIN)と外部都合(OUTER JOIN)の違いを知りたい
目次

データベース|テーブル結合(JOIN)とは

テーブル結合(JOIN)とは、複数のテーブルから必要なデータ項目を抽出し、新しい1つのテーブルを作ることを指します。

基本は上図に示すような2つのテーブルから1つのテーブルを作る方法です。テーブル間で共通で保持するID(上図の例ではサービスID)を基準とし、異なるテーブル間のデータの関係性を紐付けることでテーブル結合が実現できます。

また、テーブル結合はSQLを用いて実現できます。(SQLによる具体的なテーブル結合方法は後述します)

テーブル結合の目的

テーブル結合は、データベース上に散らばった数あるデータ項目およびテーブルから、人間が理解しやすい1つの結果表を得るために行われます。

テーブル結合によって得られた結果表は、データ分析用途やレポーティング等の報告用途で利用されることが多いです。

【参考】データベースの学習におすすめの書籍

データベースの基礎から身につけたい初学者向け
SQL操作など応用も加味して学習したい方向け

どちらも非常に分かりやすい優良教材です。その他データベーススペシャリストやソフトウェア開発も見据えた方向けのおすすめ書籍・動画教材はこちらの記事で紹介しています。

テーブルの結合方法

SQLを用いて実行するテーブル結合には、次の4つが代表的です。以下1つずつ確認していきましょう。

  • 内部結合(INNER JOIN)
  • 左外部結合(LEFT OUTER JOIN)
  • 右外部結合(RIGHT OUTER JOIN)
  • 全外部結合(FULL OUTER JOIN)

内部結合(INNER JOIN)|基本形

SELECT *
FROM   会員                                -- メインテーブル
JOIN   サービス                             -- 結合するテーブル
ON     会員.サービスID = サービス.サービスID   -- 結合条件

内部結合(INNER JOIN)とは、結合するテーブルデータの中で、結合条件に示したデータ項目(カラム)の値が一致するデータのみを結合する方法です。

上図の例として、会員テーブルにサービステーブルを結合し、2つのテーブルからデータを取得する際のSQL文を示します。

会員テーブルには、サービス名および価格[円/月]という列項目が存在しませんが、3行目のJOIN句によってサービステーブルが結合され、サービステーブルが持つ列も参照可能になります。

ここで行(レコード)に着目すると、結合条件に指定したサービスIDの値が両方のテーブルに存在しないものは、結合後消失します。(会員テーブルの3行目とサービステーブルの4行目は、結合後消失していますね。)

左外部結合(LEFT OUTER JOIN)

SELECT *
FROM              会員                                 -- メインテーブル
LEFT OUTER JOIN   サービス                              -- 結合するテーブル
ON                会員.サービスID = サービス.サービスID    -- 結合条件

左外部結合(LEFT OUTER JOIN)とは、メインテーブル(FROM句で指定した図左側のテーブル)の値を全て取り出し、結合テーブル(JOIN句で指定した図右側のテーブル)の中で、結合条件(ON)指定のデータ項目値が一致するデータのみを結合する方法です。

ここで、右側の結合テーブルにおいて、一致するカラムの値が存在しない場合、NULL値が入ります。

右外部結合(RIGHT OUTER JOIN)

SELECT *
FROM               会員                                -- メインテーブル
RIGHT OUTER JOIN   サービス                             -- 結合するテーブル
ON                 会員.サービスID = サービス.サービスID   -- 結合条件

左外部結合(LEFT OUTER JOIN)とは、結合テーブル(JOIN句で指定した図右側のテーブル)の値を全て取り出し、メインテーブル(FROM句で指定した図左側のテーブル)の中で、結合条件(ON)指定のデータ項目値が一致するデータのみを結合する方法です。

ここで、左側の結合テーブルにおいて、一致するカラムの値が存在しない場合、NULL値が入ります。

全外部結合(FULL OUTER JOIN)

SELECT *
FROM              会員                                -- メインテーブル
FULL OUTER JOIN   サービス                             -- 結合するテーブル
ON                会員.サービスID = サービス.サービスID   -- 結合条件

全外部結合(FULL OUTER JOIN)は、前述した左外部結合および右外部結合同様、2つのテーブルを結合し、2つのテーブルで該当するデータが存在しない場合はNULL値を入れる結合方法です。

データベース・SQL操作まとめ

当サイトではデータベースの設計ノウハウやSQL操作における基本構文の解説記事を多数配信しています。合わせてご覧ください。

最後に

この記事が気に入ったら
フォローしてね!

本記事をシェア!
目次