トップページ > 基礎知識 > SQL > 内部結合(INNER JOIN)と外部結合(LEFT/RIGHT JOIN)の違い
内部結合(INNER JOIN)と外部結合(LEFT/RIGHT JOIN)の違い
[初回公開] 2019年02月23日
データベースの操作で結合(リレーション)と呼ばれる 1 回の参照で複数のテーブルの情報を合わせて表示する機能があり、結合方法として用意されている内部結合(INNER JOIN)と外部結合(OUTER JOIN)の使い方と違いについて解説する。
このページの目次
1. データベースの結合(リレーション)とは
データベースの結合(リレーション)とは、データが入った 2 つ以上のテーブルを組み合わせて 1 つのテーブルのように取り扱う操作である。
テーブルを結合するためにはそれぞれのテーブルにある共通の値が用いられ、結合方法には主に内部結合(INNER JOIN)と外部結合(OUTER JOIN)の 2 通りで行われる。
2. テーブルの結合ができるテーブル
テーブルの結合ができるテーブルは、結合させたいテーブルそれぞれに共通の値を持っているがことが条件になる。
今回は次のように都道府県を登録したテーブル「d_pref」と観光地を登録したテーブル「d_site」を用意して内部結合と外部結合を行う。
都道府県テーブル「d_pref」には都道府県名の他にカラム「pref_id」を用意しており、この値を利用して他のテーブルと結合する。
また、カラム「pref_id」は主キー(プライマリーキー)の設定を入れているので他のレコードと同じ値が入って重複することはない状態である。
観光地テーブル「d_site」にも結合に利用するカラム「pref_id」を用意している。
この値が都道府県テーブルと紐付くようになっており、例えば「大阪城」は大阪府にあるため「pref_id」は 1 を入れている。
観光地テーブルは 1 つの県内に複数の観光地があるためカラム「pref_id」は主キーにはしていない。
3. 内部結合(INNER JOIN)とは
内部結合(INNER JOIN)とは、複数のテーブルのデータで結合できた情報をだけを表示する操作である。
SQL で実行する場合には「INNER JOIN」と記載し、下図はテーブル「d_pref」に対してテーブル「d_site」を内部結合している。
結合できた結果だけを表示するため観光地テーブル「d_site」に無い滋賀県、奈良県、和歌山県は表示されない。
また、観光地テーブル「d_site」には京都府に該当するものが複数有り、join すると結合できた行が全て表示される。
SQL の記載では JOIN だけで指定することも多く、JOIN だけ指定した場合は INNER JOIN として結合する。
4. 外部結合(OUTER/LEFT/RIGHT JOIN)とは
外部結合(OUTER/LEFT/RIGHT JOIN)とは、複数のテーブルのデータを結合の可否に関わらず結合先のデータを全て表示する操作である。
外部結合にはさらに LEFT OUTER JOIN と RIGHT OUTER JOIN の 2 種類に分類され、OUTER は外部結合を表すグループ名となっている。
SQL の記載では OUTER は略すことができ、LEFT JOIN または RIGHT JOIN の記載だけでも結合できる。
LEFT OUTER JOIN は主とするテーブルの情報を全て出すのに対し、RIGHT OUTER JOIN は結合させる副とするテーブルの情報を全て表示する。
上図は LEFT OUTER JOIN の結果となり、都道府県テーブル「d_pref」を主としているため結合できなかった滋賀県、奈良県、和歌山県の情報も表示されているのが確認できる。
また、結合する観光地のデータがないため NULL になっている。
加えて、内部結合(INNER JOIN)の時と同じように京都府は複数の観光地データがあるため結合できた情報は全て表示されている。
次に RIGHT OUTER JOIN で外部結合した結果が上図のようになる。
副となる観光地テーブルの情報が全て表示されているが、このテーブルには滋賀県、奈良県、和歌山県に該当する情報がないためこれら 3 県は結果には出てきていないのが確認できる。
5. 内部結合と外部結合の違いのまとめ
内部結合と外部結合の違いのまとめとしては、結合できたデータだけを出したい場合は内部結合を利用し、結合に関わらずデータを全て出したい場合は外部結合を利用する。
また、外部結合には結合される側、もしくは結合する側のテーブルのどちらの情報を全て出すかを指定することができる。
関連記事
Windows に Python をインストールして実行する方法
プログラム
Python は AI やディープラーニングで利用されるプログラム言語で IT エンジニアの取得したいスキルの 1 つに挙げられており、まずは簡単な動作確認するために Python を Windows にインストールして実行する方法を紹介する。
Mapbox の地図データをサイト内に埋め込む基本的な使い方
プログラム
ウェブサイトやブログに地図を埋め込む場合に無償または有償で提供されている地図サービスを利用できるが、いくつかある地図サービスの中から Mapbox の地図データをサイト内に埋め込む方法について紹介する。
Google Map API を使ってサイトに地図を埋め込む方法とキーの取得
プログラム
ウェブサイトやブログに地図を埋め込む際に無償または有償で公開されている地図サービスを利用することができるが、その中で Google Map をウェブサイトに埋め込む方法と利用にあたり必要なキーの取得について紹介する。
PHP で「Non-static method *** should not be called statically」が出る場合の対応方法
プログラム
PHP を利用しているとエラーログ等に「Non-static method *** should not be called statically」が表示されることがあり、このエラーが出る原因と対応方法について紹介する。
PHP を Windows にインストールして動作確認する方法
プログラム
PHP はサーバで動作するプログラム言語(CGI)で、ブログの Wordpress の動作環境にもなっており広く利用されているが、サーバではない手元の Windows OS のパソコンでも PHP が動作するようにインストールと簡単な動作確認できるところまでを紹介する。