関係演算(選択・射影・結合・商)は、リレーショナルデータベースで表の行や列を操作し、新しい表を作る関係代数です。一方、集合演算(和・差・積・直積)は、同じ属性を持つ表同士を数学的な集合として扱う演算です。SQLではこれらを組み合わせてデータの抽出・加工を行います。

画像参照:https://johostudy.com/relationship-model/
関係演算
関係演算は、リレーショナルデータベース(RDB)でテーブル(関係)から特定のデータを抽出・操作する集合ベースの理論です。主に「選択(行の抽出)」「射影(列の抽出)」「結合(テーブルの連結)」の3つから構成され、これらを組み合わせることで、SQLの基盤となるデータの抽出や操作を実現します。
関係演算の主な種類と詳細
- 選択 : テーブルから特定の条件(WHERE句など)を満たす行(組)を抽出します。
- 射影 : テーブルから特定の列(属性)を抽出します。重複する行は自動的に削除(DISTINCT)されます。
- 結合 : 複数のテーブルを共通の列(外部キー・主キー)を基準にして1つのテーブルに連結します。
- 商 : 2つのテーブルの列の組み合わせを元に、特定のデータセットを抽出します。
- 集合演算 : 同じ構造のテーブルに対して、和(UNION)、差(EXCEPT)、積(INTERSECT)、直積(CARTESIAN PRODUCT)を計算します。
関係演算の目的と特徴
- 関係モデルという理論に基づき、テーブルから目的のデータを効率的に取り出す。
- SQLの
SELECT文におけるWHERE(選択)、SELECT 項目(射影)、JOIN(結合) の原理となっている。 - 物理的なデータの格納方法に依存せず、論理的なデータ操作を定義する。
このように、関係演算はデータベースから必要となる情報を整理・抽出する際、最も基礎となる概念です。
選択
関係演算の「選択」は、RDB(リレーショナルデータベース)において、テーブルから指定した条件(例:年齢 > 20)に合致する「行(タプル/レコード)」のみを水平方向に抽出する操作です。特定の条件でデータを絞り込む際に必須となる、基本的なデータ操作です。
タプル
複数の要素(データ)を順序付けて格納する、イミュータブル(変更不可能)なデータ構造です。

画像参照:https://45kaku.com/itpassport_text_56-01/
主な特徴
- 別名: 制限(Restriction)とも呼ばれます。
- 対象: テーブルの「行(レコード)」を対象にします。
- 結果: 条件に一致するデータだけで構成された、新しいテーブル(導出表)を作成します。
- 関係代数:
のように記述されます。
- SQL対応:
SELECT * FROM テーブル名 WHERE 条件で実装されます。
射影
射影とは、関係データベース(RDB)のテーブルから、必要な特定の列(属性)のみを垂直方向(縦)に抜き出し、新しい表を作る基本演算です。SQLでは主に SELECT 句を使用して特定の列を指定し、結果から重複行を除外する場合もあります。

画像参照:https://www.momoyama-usagi.com/entry/info-database02
概要
- 定義: テーブルから列を抽出する操作。
- 用途: 不要な列を除外して必要なデータのみ表示する。
- SQL対応:
SELECT句を使用し、重複を省く場合はSELECT DISTINCTを用いる。 - メリット: 可読性の向上、データ転送量の削減、セキュリティの向上(必要な列のみ開示)。
- 対比: 特定の行を抽出する操作は「選択」と呼ぶ。
使用例
「社員ID」「名前」「住所」「電話番号」を持つテーブルから、「名前」と「電話番号」だけを取得する操作。
sql
SELECT 名前, 電話番号 FROM 社員テーブル;
結合
結合は、2つの表(関係)を共通の列(結合キー)に基づいて関連付け、1つの新しい表を作成する操作です。主キーと外部キーの関係を利用し、複数のテーブルをまたぐデータを統合する際に必須の技術です。等結合(相等しい値で結合)や自然結合(共通列をまとめる)などがあります。

画像参照:https://www.momoyama-usagi.com/entry/info-database02
主な特徴と詳細
- 目的: 分割された表を結合キーを介して連結し、必要な情報を1つにまとめること。
- 仕組み: 2つの表の「直積」から「選択」条件に合う行を抽出する処理と理解されます。
- 種類:
- 等結合: 結合列の値が等しい行を結合する。
- 自然結合: 等結合の際、重複する結合列を1つにまとめる。
- 外部結合: 結合条件に合致しない行も保持し、NULLで埋める。
- 関係演算の文脈: 「選択(行抽出)」「射影(列抽出)」と並ぶ、リレーショナルデータベースにおける重要な操作です。
具体的には、従業員表(部署ID)と部署表(部署ID)を「部署ID」で結合し、社員名と部署名を並べて表示する操作などがこれにあたります。
商
関係データベースの「商」演算(R÷Q)は、表Rの中から表Qの全要素に対応する行を抽出する集合演算です。「全属性を網羅する」といった全称条件(for all)の抽出に用いられ、具体的な例として「全科目を履修した学生」や「全部品を供給する業者」の特定に使われます。

画像参照:https://www.momoyama-usagi.com/entry/info-database02
商演算のポイント
- 「すべて」の条件: 割る側の表(Q)の全ての行の要素と関連する、割られる側の表(R)の行を特定する。
- 結果: R÷Q の結果は、Qに含まれる列(属性)が取り除かれ、Qとの組み合わせが成立した行の列のみが残る。
- 用途: 「全ての〜を持つ」という問い合わせに使用される。
標準SQLでは直接実装されておらず、複数のNOT EXISTSやGROUP BYとCOUNTを組み合わせて表現されます。
集合演算
データベースにおける集合演算とは、SQLを用いて2つのテーブル(SELECT結果)を1つの集合と見なし、和・差・積などの規則に基づいてデータを縦方向(行方向)に結合、あるいは抽出する操作です。代表的な演算に和(UNION)、差(EXCEPT)、積(INTERSECT)があります。
主要な集合演算子
- 和(UNION ): 2つのテーブルのすべての行を合体し、重複する行は1つにまとめる(UNION ALLは重複も残す)。
- 差(EXCEPT): 第1のテーブルから第2のテーブルに存在する行を除外する。
- 積(INTERSECT): 2つのテーブルの共通する行のみを抽出する。
- 直積(CROSS JOIN): 2つのテーブルの行のすべての組み合わせを作成する。
集合演算の注意点
- 列数・データ型の一致: 演算対象となる2つのSELECT文の結果は、列数、順序、およびデータ型が一致していなければならない。
- 結果セット: 集合演算は結果を新しいテーブルとして返すが、通常は列名に第1テーブルのものが使用される。
これらの演算は、複数のテーブルから特定の条件に合致するデータを抽出する際や、名簿の統合、データの差分チェックなどに利用されます。
直積
データベースにおける「直積(デカルト積)」は、2つのテーブルの全レコード(行)のあらゆる組み合わせを生成する集合演算です。M行のテーブルAとN行のテーブルBを直積すると、M×N行の新しいテーブルが作成されます。SQLではCROSS JOINとして知られ、通常は関連性に関係なく全ペアを出力します。

画像参照:https://www.momoyama-usagi.com/entry/info-database02
主な特徴:
- 定義: テーブルAの各要素とテーブルBの各要素を組み合わせる。
- 行数:
行(テーブルAが3行、Bが2行なら、3×2 = 6
行)。
- 列数: 両テーブルの列数の合計。
- SQLでの実行:
SELECT * FROM テーブル1, テーブル2またはSELECT * FROM テーブル1 CROSS JOIN テーブル2。 - 用途: 全パターンの生成、マスタデータ同士の組み合わせ作成など。
注意点として、直積は意図せずに行うと膨大なデータ量になる(「直積の罠」)可能性があるため、通常はWHERE句などで絞り込みを行うか、適切な結合(INNER JOINなど)を使用します。

コメント