類似用語

内部結合と外部結合の違い

2021年1月22日

内部結合と外部結合

テーブルの結合には、内部結合外部結合があります。

内部結合と外部結合って何が違うの?
内部結合と外部結合の違いは次の通りです。

内部結合と外部結合の違い

内部結合:両方のテーブルに存在するデータを抽出する結合

外部結合:基準となるテーブルに存在すれば抽出する結合

スポンサーリンク

内部結合とは

内部結合は、結合条件に指定した項目の値が、両方のテーブルに存在する場合のみ、お互いのレコードを抽出して結合します。

例えば、以下は「社員」テーブルと「部署マスタ」テーブルを「社員.部署ID = 部署マスタ.ID」の結合条件で内部結合した結果です。

内部結合の例

内部結合した結果、結合条件である「部署ID」が両方のテーブルに存在する「部署ID」"1"と"2"のレコードが結合され、片方のテーブルにしか存在しない「部署ID」"3"と"4"のレコードは結合されていません。

内部結合する場合は、SQLの「INNER JOIN」もしくは「WHERE句」により内部結合できます。

■INNER JOINを使った例

SELECT

社員.社員ID, 社員.社員名, 社員.部署ID, 部署マスタ.部署名

FROM

社員 INNER JOIN 部署マスタ ON 社員.部署ID = 部署マスタ.ID;

■WHEREを使った例

SELECT

社員.社員ID, 社員.社員名, 社員.部署ID, 部署マスタ.部署名

FROM

社員, 部署マスタ

WHERE

社員.部署ID = 部署マスタ.ID;

外部結合とは

外部結合は、基準となるテーブルを指定します。

どちらのテーブルを基準にするかを指定し、その基準となるテーブルに存在するレコードを抽出、基準ではないテーブルからは、結合条件に合致するレコードのみを抽出して結合します。

ここがポイント

  • 内部結合:結合条件に指定した項目の値が、両方のテーブルにあれば抽出する
  • 外部結合:結合条件に指定した項目の値が、基準テーブルにあれば抽出する

左外部結合(LEFT OUTER JOIN)

左側のテーブルを基準とするのが「左外部結合」(LEFT OUTER JOIN)です。

例えば、以下は「社員」テーブルと「部署マスタ」テーブルを「社員.部署ID = 部署マスタ.ID」の結合条件で左外部結合した結果です。

左外部結合の例

左外部結合した結果、基準となる「社員」テーブルに存在するデータを抽出し、「部署マスタ」テーブルからは条件に一致したデータのみ抽出しています。

そのため、部署IDが「社員」テーブルにしか存在しない部署ID「4」のレコードは、「社員」テーブルの項目(カラム)である社員ID、社員名、部署IDしか設定されていません。(部署名はNULL)

左外部結合する場合は、SQLの「LEFT OUTER JOIN」を使用します。※OUTERは省略可能

■LEFT OUTER JOINを使った例

SELECT

社員.社員ID, 社員.社員名, 社員.部署ID, 部署マスタ.部署名

FROM

社員 LEFT OUTER JOIN 部署マスタ ON 社員.部署ID = 部署マスタ.ID;

スポンサーリンク

右外部結合(RIGHT OUTER JOIN)

右側のテーブルを基準とするのが「右外部結合」(RIGHT OUTER JOIN)です。

例えば、以下は「社員」テーブルと「部署マスタ」テーブルを「社員.部署ID = 部署マスタ.ID」の結合条件で右外部結合した結果です。

右外部結合の例

右外部結合した結果、基準となる「部署マスタ」テーブルに存在するデータを抽出し、「社員」テーブルからは条件に一致したデータのみ抽出しています。

そのため、部署IDが「部署マスタ」テーブルにしか存在しない部署ID「3」のレコードは、「部署マスタ」テーブルの項目(カラム)である部署ID、部署名しか設定されていません。(社員ID、社員名はNULL)

右外部結合する場合は、SQLの「RIGHT OUTER JOIN」を使用します。※OUTERは省略可能

■RIGHT OUTER JOINを使った例

SELECT

社員.社員ID, 社員.社員名, 部署マスタ.ID, 部署マスタ.部署名

FROM

社員 RIGHT OUTER JOIN 部署マスタ ON 社員.部署ID = 部署マスタ.ID;

完全外部結合(FULL OUTER JOIN)

完全外部結合(FULL OUTER JOIN)は、両方のテーブルを基準とし、それぞれに一致しないレコードも抽出結果に含めます。

例えば、以下は「社員」テーブルと「部署マスタ」テーブルを「社員.部署ID = 部署マスタ.ID」の結合条件で完全外部結合した結果です。

完全外部結合の例

「社員」テーブル、「部署マスタ」テーブルの両方のテーブルに存在するデータを抽出(部署IDが一致しないレコードも抽出対象に含める)しています。

完全外部結合する場合は、SQLの「FULL OUTER JOIN」を使用します。※OUTERは省略可能

■FULL OUTER JOINを使った例

SELECT

社員.社員ID, 社員.社員名, 社員.部署ID, 部署マスタ.部署名

FROM

社員 FULL OUTER JOIN 部署マスタ ON 社員.部署ID = 部署マスタ.ID;

helpful