オプショナリティとテーブル結合 (3)
前回の続きです。今回は、「任意 - 必須」の場合と「任意 - 任意」の場合について、サンプルデータを使って説明します。
前回: id:simply-k:20100819:1282156592
「任意 - 必須」の場合
社員テーブル
社員ID | 氏名 | 部署ID |
---|---|---|
0001 | 鈴木 広 | 01 |
0002 | 佐藤 幸子 | 02 |
0003 | 山本 健二 | 02 |
0004 | 田中 優子 | 99 |
部署テーブル
部署ID | 部署名 |
---|---|
01 | 経理 |
02 | 営業 |
03 | 開発 |
99 | 所属なし |
テーブル間のオプショナリティ
- 部署テーブルの各レコードに対し、対応する社員テーブルのレコードが存在しない場合があります。 (多側:任意)
- 社員テーブルの各レコードに対し、対応する部署テーブルのレコードが1つ存在します。 (1側:必須)
INNER JOIN / LEFT JOIN
社員ID | 氏名 | 社員_部署ID | 部署_部署ID | 部署名 |
---|---|---|---|---|
0001 | 鈴木 広 | 01 | 01 | 経理 |
0002 | 佐藤 幸子 | 02 | 02 | 営業 |
0003 | 山本 健二 | 02 | 02 | 営業 |
0004 | 田中 優子 | 99 | 99 | 所属なし |
INNER JOINとLEFT JOINは、同じ結果となります。
RIGHT JOIN / FULL JOIN
社員ID | 氏名 | 社員_部署ID | 部署_部署ID | 部署名 |
---|---|---|---|---|
0001 | 鈴木 広 | 01 | 01 | 経理 |
0002 | 佐藤 幸子 | 02 | 02 | 営業 |
0003 | 山本 健二 | 02 | 02 | 営業 |
0004 | 田中 優子 | 99 | 99 | 所属なし |
NULL | NULL | NULL | 03 | 開発 |
RIGHT JOINとFULL JOINは、同じ結果となります。
「任意 - 任意」の場合
社員テーブル
社員ID | 氏名 | 部署ID |
---|---|---|
0001 | 鈴木 広 | 01 |
0002 | 佐藤 幸子 | 02 |
0003 | 山本 健二 | 02 |
0004 | 田中 優子 | NULL |
部署テーブル
部署ID | 部署名 |
---|---|
01 | 経理 |
02 | 営業 |
03 | 開発 |
テーブル間のオプショナリティ
- 部署テーブルの各レコードに対し、対応する社員テーブルのレコードが存在しない場合があります。 (多側:任意)
- 社員テーブルの各レコードに対し、対応する部署テーブルのレコードが存在しない場合があります。 (1側:任意)
INNER JOIN
社員ID | 氏名 | 社員_部署ID | 部署_部署ID | 部署名 |
---|---|---|---|---|
0001 | 鈴木 広 | 01 | 01 | 経理 |
0002 | 佐藤 幸子 | 02 | 02 | 営業 |
0003 | 山本 健二 | 02 | 02 | 営業 |
LEFT JOIN
社員ID | 氏名 | 社員_部署ID | 部署_部署ID | 部署名 |
---|---|---|---|---|
0001 | 鈴木 広 | 01 | 01 | 経理 |
0002 | 佐藤 幸子 | 02 | 02 | 営業 |
0003 | 山本 健二 | 02 | 02 | 営業 |
0004 | 田中 優子 | NULL | NULL | NULL |
RIGHT JOIN
社員ID | 氏名 | 社員_部署ID | 部署_部署ID | 部署名 |
---|---|---|---|---|
0001 | 鈴木 広 | 01 | 01 | 経理 |
0002 | 佐藤 幸子 | 02 | 02 | 営業 |
0003 | 山本 健二 | 02 | 02 | 営業 |
NULL | NULL | NULL | 03 | 開発 |
FULL JOIN
社員ID | 氏名 | 社員_部署ID | 部署_部署ID | 部署名 |
---|---|---|---|---|
0001 | 鈴木 広 | 01 | 01 | 経理 |
0002 | 佐藤 幸子 | 02 | 02 | 営業 |
0003 | 山本 健二 | 02 | 02 | 営業 |
0004 | 田中 優子 | NULL | NULL | NULL |
NULL | NULL | NULL | 03 | 開発 |
INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOINは、全て違う結果となりました。「任意 - 任意」の場合は、これらの4種類のJOINの結果が、全て異なる可能性があります。(データによっては同じになる可能性もあります。)
「オプショナリティとテーブル結合」は、今回で終了です。
前回: id:simply-k:20100819:1282156592