スポンサーリンク

【応用情報技術者試験】データベースを学ぼう!     ~第4章~関係演算と集合演算

関係演算(選択・射影・結合・商)は、リレーショナルデータベースで表の行や列を操作し、新しい表を作る関係代数です。一方、集合演算(和・差・積・直積)は、同じ属性を持つ表同士を数学的な集合として扱う演算です。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 EXISTSGROUP BYCOUNTを組み合わせて表現されます。

集合演算

データベースにおける集合演算とは、SQLを用いて2つのテーブル(SELECT結果)を1つの集合と見なし、和・差・積などの規則に基づいてデータを縦方向(行方向)に結合、あるいは抽出する操作です。代表的な演算に和(UNION)、差(EXCEPT)、積(INTERSECT)があります。 

主要な集合演算子

  • 和(UNION ): 2つのテーブルのすべての行を合体し、重複する行は1つにまとめる(UNION ALLは重複も残す)。
  • 差(EXCEPT): 第1のテーブルから第2のテーブルに存在する行を除外する。
  • 積(INTERSECT): 2つのテーブルの共通する行のみを抽出する。
  • 直積CROSS JOIN: 2つのテーブルの行のすべての組み合わせを作成する。 

集合演算の注意点

  1. 列数・データ型の一致: 演算対象となる2つのSELECT文の結果は、列数、順序、およびデータ型が一致していなければならない。
  2. 結果セット: 集合演算は結果を新しいテーブルとして返すが、通常は列名に第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など)を使用します。 

コメント