データベース 第2部 データベース 1 データ操作


 

1 データ操作

ここでは、具体的な例を用いて、関係データベースのデータ操作について説明します。情報処理におけるデータ操作は、代表的な四つの集合演算(和集合、差集合、積集合、直積集合)と関係モデルのための四つの関係演算(選択、射影、結合、商)からなります。

1.1 集合演算

次の受注商品、在庫商品の二つの表をもとに、和集合、差集合、積集合の集合演算(データ操作)について説明します。

受注商品
商品番号商品名単価
A01テレビ(液晶大型)
200000
A11テレビ(液晶小型)
50000
G02DVDレコーダ
80000
S05ラジオ
3000
在庫商品
商品番号商品名単価
G02DVDレコーダ
80000
Z01冷蔵庫
150000
Z11エアコン
98000

(1) 和集合(A∪B; sum)

和集合は、合併集合(union)ともいいます。

例えば、受注商品、在庫商品のいずれかの表、もしくは両方の表にある商品を抽出するようなデータ操作には、和集合演算を用います。

和集合演算の場合、結果にタプル(行)の重複がありません。また、二つの表に対応する列のデータ型は同じでなければなりませんが、列名は異なってもかまいません。

<演算結果>
商品番号商品名単価
A01テレビ(液晶大型)
200000
A11テレビ(液晶小型)
50000
G02DVDレコーダ
80000
S05ラジオ
3000
Z01冷蔵庫
150000
Z11エアコン
98000
受注商品 在庫商品 テレビ(液晶大型) テレビ(液晶小型) ラジオ DVD レコーダ 冷蔵庫 エアコン

(2) 差集合(A-B; difference)

差集合は、例えば、受注商品のうち、在庫商品になかった商品を抽出するようなデータ操作に使用されます。

差集合演算の場合も和集合演算同様、二つの表に対応する列のデータ型は同じでなければなりませんが、列名は異なってもかまいません。

<演算結果>
商品番号商品名単価
A01テレビ(液晶大型)
200000
A11テレビ(液晶小型)
50000
S05ラジオ
3000
受注商品 在庫商品 テレビ(液晶大型) テレビ(液晶小型) ラジオ DVD レコーダ 冷蔵庫 エアコン

(3) 積集合(A∩B; product)

積集合は、共通集合演算(intersection)ともいいます。

例えば、受注商品と在庫商品の両方の表に存在する商品を抽出するようなデータ操作に使用されます。

積集合演算の場合も、二つの表に対応する列のデータ型は同じでなければなりませんが、列名は異なってもかまいません。

<演算結果>
商品番号商品名単価
G02DVDレコーダ
80000
受注商品 在庫商品 テレビ(液晶大型) テレビ(液晶小型) ラジオ DVD レコーダ 冷蔵庫 エアコン

(4) 直積集合(C×D; cartesian product)

二つの表の各タプル同士を組み合わせて、一つの表を作成する場合には、直積集合演算を用います。ただし、この演算はデータベースを操作する効率を上げるために、中間処理として行われるもので、利用者が意識して使うことはほとんどありません。

直積集合演算の場合、列名の前に表名を付け、同じ列名になることを防ぎ、行数は、それぞれの表の行数を掛けた数となります。

<演算結果>
商品番号商品名単価商品番号商品名単価
A01テレビ(液晶大型)
200000
G02DVDレコーダ
80000
A01テレビ(液晶大型)
200000
Z01冷蔵庫
150000
A01テレビ(液晶大型)
200000
Z11エアコン
98000
A11テレビ(液晶小型)
50000
G02DVDレコーダ
80000
A11テレビ(液晶小型)
50000
Z01冷蔵庫
150000
A11テレビ(液晶小型)
50000
Z11エアコン
98000
G02DVDレコーダ
80000
G02DVDレコーダ
80000
G02DVDレコーダ
80000
Z01冷蔵庫
150000
G02DVDレコーダ
80000
Z11エアコン
98000
S05ラジオ
3000
G02DVDレコーダ
80000
S05ラジオ
3000
Z01冷蔵庫
150000
S05ラジオ
3000
Z11エアコン
98000

1.2 関係演算

次の受注、顧客の二つの表をもとに、選択、射影、結合の関係演算(データ操作)について説明します。

受注
受注番号受注年月日顧客番号受注合計
000012024/04/011001
640000
000022024/04/021006
518000
000032024/04/021003
600000
000042024/04/051001
3000
顧客
顧客番号顧客名住所電話番号
1001株式会社冨田貿易東京都港区芝浦1-X-XX03-3256-XXXX
1003宇宙商事株式会社東京都足立区神明22-XX03-5126-XXXX
1006有限会社吉野物産大阪府大阪市中央区城見23-XX06-6112-XXXX

(1) 選択(selection)

選択は、指定した表から、条件に合致した行のみ抽出する操作です。

選択によって、「受注」表の中から、「受注番号」が"00003"の行だけを抽出すると、次のような結果が得られます。

受注
受注番号受注年月日顧客番号受注合計
000012024/04/011001
640000
000022024/04/021006
518000
000032024/04/021003
600000
000042024/04/051001
3000

<演算結果>
受注番号受注年月日顧客番号受注合計
000032024/04/021003
600000







─┐
 │
 │選択
 │
 │探索条件に適合した
 │特定の行を取り出す
 │
 │
←┘

(2) 射影(projection)

指定した表から、特定の列のみ抽出する操作を射影と呼びます。このとき、重複する要素を表示しないようにすることもできます。

射影によって、「受注」表の中から「顧客番号」のみ抽出すると、次のような結果になります。

受注
受注番号受注年月日顧客番号受注合計
000012024/04/011001
640000
000022024/04/021006
518000
000032024/04/021003
600000
000042024/04/051001
3000
射影
             │指定された列を
             ↓取り出す
            
<演算結果>
 顧客番号 
1001
1006
1003
1001

(3) 結合(join)

複数の表から必要な列を抽出し、新たな表を作成する操作を結合と呼びます。

例えば、結合によって「受注」表と「顧客」表から列名をすべて抽出し、新たに一覧を作成すると、次のような結果になります。

<演算結果>
受注番号受注年月日顧客番号受注合計顧客名住所電話番号
000012024/04/011001
640000
株式会社冨田貿易東京都港区芝浦1-X-XX03-3256-XXXX
000022024/04/021006
518000
有限会社吉野物産大阪府大阪市中央区城見23-XX06-6112-XXXX
000032024/04/021003
600000
宇宙商事株式会社東京都足立区神明22-XX03-5126-XXXX
000042024/04/051001
3000
株式会社冨田貿易東京都港区芝浦1-X-XX03-3256-XXXX

(4) 商(division)

ある表の列要素と別の表の列要素を比較し、一方がもう一方のすべての要素を完全に含んでいるかどうかを調べる操作をまたは除算と呼びます。

次の例は、「VIP顧客」表にあるすべての(この例では1件しかないが)「顧客番号」の「受注」を求める操作です。

受注
受注番号受注年月日顧客番号受注合計
000012024/04/011001
640000
000022024/04/021006
518000
000032024/04/021003
600000
000042024/04/051001
3000


VIP顧客
顧客番号
1001
<演算結果>
受注番号受注年月日受注合計
000012024/04/01
640000
000042024/04/05
3000


これまで説明してきた集合演算や関係演算のうち、いくつかは他の演算を組み合わせることにより表現できます。和集合、差集合、選択、射影、結合に、属性名変更を加えた六つの演算を組み合わせれば、他の演算もすべて表現できます。例えば、積集合は差集合を利用して、
A∩B=A-(A-B)  として求めることができます。

したがって、関係データベースにおけるデータ操作では、これらの六つの演算が最小限必要なものとなります。