ここでは、具体的な例を用いて、関係データベースのデータ操作について説明します。情報処理におけるデータ操作は、代表的な四つの集合演算(和集合、差集合、積集合、直積集合)と関係モデルのための四つの関係演算(選択、射影、結合、商)からなります。
次の受注商品、在庫商品の二つの表をもとに、和集合、差集合、積集合の集合演算(データ操作)について説明します。
|
|
和集合は、合併集合(union)ともいいます。
例えば、受注商品、在庫商品のいずれかの表、もしくは両方の表にある商品を抽出するようなデータ操作には、和集合演算を用います。
和集合演算の場合、結果にタプル(行)の重複がありません。また、二つの表に対応する列のデータ型は同じでなければなりませんが、列名は異なってもかまいません。
|
差集合は、例えば、受注商品のうち、在庫商品になかった商品を抽出するようなデータ操作に使用されます。
差集合演算の場合も和集合演算同様、二つの表に対応する列のデータ型は同じでなければなりませんが、列名は異なってもかまいません。
|
積集合は、共通集合演算(intersection)ともいいます。
例えば、受注商品と在庫商品の両方の表に存在する商品を抽出するようなデータ操作に使用されます。
積集合演算の場合も、二つの表に対応する列のデータ型は同じでなければなりませんが、列名は異なってもかまいません。
|
二つの表の各タプル同士を組み合わせて、一つの表を作成する場合には、直積集合演算を用います。ただし、この演算はデータベースを操作する効率を上げるために、中間処理として行われるもので、利用者が意識して使うことはほとんどありません。
直積集合演算の場合、列名の前に表名を付け、同じ列名になることを防ぎ、行数は、それぞれの表の行数を掛けた数となります。
| 商品番号 | 商品名 | 単価 | 商品番号 | 商品名 | 単価 |
|---|---|---|---|---|---|
| A01 | テレビ(液晶大型) | 200000 | G02 | DVDレコーダ | 80000 |
| A01 | テレビ(液晶大型) | 200000 | Z01 | 冷蔵庫 | 150000 |
| A01 | テレビ(液晶大型) | 200000 | Z11 | エアコン | 98000 |
| A11 | テレビ(液晶小型) | 50000 | G02 | DVDレコーダ | 80000 |
| A11 | テレビ(液晶小型) | 50000 | Z01 | 冷蔵庫 | 150000 |
| A11 | テレビ(液晶小型) | 50000 | Z11 | エアコン | 98000 |
| G02 | DVDレコーダ | 80000 | G02 | DVDレコーダ | 80000 |
| G02 | DVDレコーダ | 80000 | Z01 | 冷蔵庫 | 150000 |
| G02 | DVDレコーダ | 80000 | Z11 | エアコン | 98000 |
| S05 | ラジオ | 3000 | G02 | DVDレコーダ | 80000 |
| S05 | ラジオ | 3000 | Z01 | 冷蔵庫 | 150000 |
| S05 | ラジオ | 3000 | Z11 | エアコン | 98000 |
次の受注、顧客の二つの表をもとに、選択、射影、結合の関係演算(データ操作)について説明します。
|
|
選択は、指定した表から、条件に合致した行のみ抽出する操作です。
選択によって、「受注」表の中から、「受注番号」が"00003"の行だけを抽出すると、次のような結果が得られます。
|
─┐ │ │選択 │ │探索条件に適合した │特定の行を取り出す │ │ ←┘ |
指定した表から、特定の列のみ抽出する操作を射影と呼びます。このとき、重複する要素を表示しないようにすることもできます。
射影によって、「受注」表の中から「顧客番号」のみ抽出すると、次のような結果になります。
| ||||||||||||||||||||
| ||||||||||||||||||||
|
複数の表から必要な列を抽出し、新たな表を作成する操作を結合と呼びます。
例えば、結合によって「受注」表と「顧客」表から列名をすべて抽出し、新たに一覧を作成すると、次のような結果になります。
| 受注番号 | 受注年月日 | 顧客番号 | 受注合計 | 顧客名 | 住所 | 電話番号 |
|---|---|---|---|---|---|---|
| 00001 | 2024/04/01 | 1001 | 640000 | 株式会社冨田貿易 | 東京都港区芝浦1-X-XX | 03-3256-XXXX |
| 00002 | 2024/04/02 | 1006 | 518000 | 有限会社吉野物産 | 大阪府大阪市中央区城見23-XX | 06-6112-XXXX |
| 00003 | 2024/04/02 | 1003 | 600000 | 宇宙商事株式会社 | 東京都足立区神明22-XX | 03-5126-XXXX |
| 00004 | 2024/04/05 | 1001 | 3000 | 株式会社冨田貿易 | 東京都港区芝浦1-X-XX | 03-3256-XXXX |
ある表の列要素と別の表の列要素を比較し、一方がもう一方のすべての要素を完全に含んでいるかどうかを調べる操作を商または除算と呼びます。
次の例は、「VIP顧客」表にあるすべての(この例では1件しかないが)「顧客番号」の「受注」を求める操作です。
| 受注番号 | 受注年月日 | 顧客番号 | 受注合計 |
|---|---|---|---|
| 00001 | 2024/04/01 | 1001 | 640000 |
| 00002 | 2024/04/02 | 1006 | 518000 |
| 00003 | 2024/04/02 | 1003 | 600000 |
| 00004 | 2024/04/05 | 1001 | 3000 |
|
⇨ |
|
これまで説明してきた集合演算や関係演算のうち、いくつかは他の演算を組み合わせることにより表現できます。和集合、差集合、選択、射影、結合に、属性名変更を加えた六つの演算を組み合わせれば、他の演算もすべて表現できます。例えば、積集合は差集合を利用して、
A∩B=A-(A-B) として求めることができます。
したがって、関係データベースにおけるデータ操作では、これらの六つの演算が最小限必要なものとなります。