目標
「リレーションの操作体系」の種類を確認する
「リレーショナル代数」について概要を理解する
リレーションの操作体系
リレーションの操作体系
リレーションの操作とは
データベースのユーザーはデータベースに格納されたデータに対して「検索」や「抽出」を行ったり、それらを組み合わせることで沢山の情報を得ることができます。この「検索」や「抽出」「組み合わせる」などがリレーションの操作となります。
リレーションの操作体系
リレーションの操作体系には次の2つの種類があります。
- リレーショナル代数
- リレーショナル論理式
リレーショナル代数
リレーショナル代数とは
リレーショナル代数(関係代数)はリレーショナルデータベースにおいて集合の操作を体系化したものとなります。
リレーショナル代数の分類
リレーショナル代数には集合演算とリレーショナルデータベース固有の演算を定義したものがあります。
- 集合演算…和集合演算・差集合演算・共通集合演算・直積演算
- 固有演算…射影演算・選択演算・結合演算・商演算
和両立
集合演算のうち「和集合演算」「差集合演算」「共通集合演算」については演算の対象とする2つのリレーションで「リレーションの次数」「対応するドメイン(属性の型やその範囲)」が等しい必要があります。この関係のことを和両立といいます。

上の和両立のリレーションをベン図で表現すると次のようになります。

集合演算
和集合 青円∪黄円
和集合演算を行うと両リレーションで存在している全てのタプルを1パターンずつ抽出します。同じものが両方のリレーションにある場合は2度抽出はされません。


差集合 青円ー黄円 黄円ー青円
差集合演算ではどちらかにしかないタプルのパターンを抽出します。
【差集合:夏期限定メニューだけに存在するタプルの抽出】


【差集合:冬期限定メニューだけに存在するタプルの抽出】


共通集合 青円∩黄円
共通集合演算では両方のリレーションに存在するタプルを抽出します。


直積
直積は2つのリレーションにある全てのタプルの組み合わせを求める演算です。例えば下の2つのリレーション「顧客テーブル」「冬期限定メニュー」について直積を考えてみたいと思います。

上のリレーションで直積を求めると下のようになります。

固有演算
射影演算
リレーションの中から指定した属性のカラム(列)を取り出す演算です。例えば下のリレーション(在庫テーブル)から「商品」「発注元」「仕入れ値」のカラムを取り出すとした場合が射影演算となります。

射影演算で指定する属性を「商品」「発注元」「仕入れ値」とした場合の表示は次のようになります。

選択演算
リレーションの中からある属性に対して指定した条件とマッチするタプル(行)を取り出す演算です。例えば下のリレーション(在庫テーブル)から在庫数が10以下の行を取り出すような操作が選択演算となります。

選択演算を在庫数が10以下で行った場合の表示は次にようになります。

結合演算
2つのリレーションに条件を指定して1つにする演算を結合演算といいます。結合演算には内部結合…「等結合」「自然結合」など
外部結合…「完全外部結合」「左外部結合」「右外部結合」があります。
内部結合(等結合)
2つのリレーションから双方で一致する値のタプル同士を結合して取り出す結合で取り出しに利用した属性の値が重複して存在する結合を等結合といいます。
下は例となります。

等結合の結果は次のようになります。

内部結合(自然結合)
2つのリレーションから双方で一致する値のタプル同士を結合して取り出す結合を自然結合といいます。
例えば下の表では「商品区分」と「発注先一覧」で「会社番号」属性の一致するタプル同士を結び付けて結合します。

自然結合の結果は次のようになります。

完全外部結合
2つのリレーションから全てのタプルを組み合わせて取り出す結合を完全外部結合といいます。対するリレーションで結合部分に値がない場合は「NULL」となります。


左外部結合
完全外部結合の結果から左のリレーションに値が存在するタプルのみを取り出す結合を左外部結合といいます。下は例となります。


右外部結合
完全外部結合の結果から右のリレーションに値が存在するタプルのみを取り出す結合を右外部結合といいます。下は例となります。


商演算
商演算は次の手順で行われます。
- 割られる側の全タプルの内、割る側で指定した値(今回は「株式会社なんごく」と「株式会社ふれっしゅ」)が存在する全てのタプルを取り出す。
- 取り出したタプルの内、割る側で指定した値以外の値が全て同じものを取り出す。
【手順1】
割られる側の全タプルの内、割る側で指定した値(今回は「株式会社なんごく」と「株式会社ふれっしゅ」)が在する全てのタプルを取り出す。

【手順2】
取り出したタプルの内、割る側で指定した値以外の値が全て同じものを取り出す。

商演算を行った結果は次のようになります。

今回は以上になります。

ブックマークのすすめ
「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。

