オプショナリティとテーブル結合 (2)

前回の続きです。今回は、「必須 - 必須」の場合と「必須 - 任意」の場合について、サンプルデータを使って説明します。
前回: id:simply-k:20100818:1282140691
次回: id:simply-k:20100820:1282234146

「必須 - 必須」の場合

ER図

次のようなER図に基づいてテーブルおよびリレーションシップを作成する場合を考えます。

社員テーブル
社員ID 氏名 部署ID
0001 鈴木 広 01
0002 佐藤 幸子 02
0003 山本 健二 02
0004 田中 優子 99
部署テーブル
部署ID 部署名
01 経理
02 営業
99 所属なし
テーブル間のオプショナリティ
  • 部署テーブルの各レコードに対し、対応する社員テーブルのレコードが1つ以上存在します。 (多側:必須)
  • 社員テーブルの各レコードに対し、対応する部署テーブルのレコードが1つ存在します。 (1側:必須)
INNER JOIN / LEFT JOIN / RIGHT JOIN / FULL JOIN
社員ID 氏名 社員_部署ID 部署_部署ID 部署名
0001 鈴木 広 01 01 経理
0002 佐藤 幸子 02 02 営業
0003 山本 健二 02 02 営業
0004 田中 優子 99 99 所属なし

INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOINは、全て同じ結果となります。

「必須 - 任意」の場合

ER図

次のようなER図に基づいてテーブルおよびリレーションシップを作成する場合を考えます。

社員テーブル
社員ID 氏名 部署ID
0001 鈴木 広 01
0002 佐藤 幸子 02
0003 山本 健二 02
0004 田中 優子 NULL
部署テーブル
部署ID 部署名
01 経理
02 営業
テーブル間のオプショナリティ
  • 部署テーブルの各レコードに対し、対応する社員テーブルのレコードが1つ以上存在します。 (多側:必須)
  • 社員テーブルの各レコードに対し、対応する部署テーブルのレコードが存在しない場合があります。 (1側:任意)
INNER JOIN / RIGHT JOIN
社員ID 氏名 社員_部署ID 部署_部署ID 部署名
0001 鈴木 広 01 01 経理
0002 佐藤 幸子 02 02 営業
0003 山本 健二 02 02 営業

INNER JOINとRIGHT JOINは、同じ結果となります。

LEFT JOIN / FULL JOIN
社員ID 氏名 社員_部署ID 部署_部署ID 部署名
0001 鈴木 広 01 01 経理
0002 佐藤 幸子 02 02 営業
0003 山本 健二 02 02 営業
0004 田中 優子 NULL NULL NULL

LEFT JOINとFULL JOINは、同じ結果となります。


次回は、「任意 - 必須」の場合と「任意 - 任意」の場合について説明します。
前回: id:simply-k:20100818:1282140691
次回: id:simply-k:20100820:1282234146