差(サ)とは?データベースの集合演算を初心者向けに解説
生徒
「先生、データベースの勉強をしていたら、差(サ)という言葉が出てきました。これは何を意味するんですか?」
先生
「良いところに気づきましたね。差(サ)は、データベースにおける表と表の集合演算(シュウゴウエンザン)のひとつです。簡単にいうと、一方の表にはあるけれど、もう一方の表にはないデータを取り出す演算のことです。」
生徒
「つまり、比較して違いを見つける操作ということですか?」
先生
「その通りです。例えば、会員リストから退会者を引いた残りを求める場合や、在庫リストと出荷済みリストの差を求めて未出荷商品を確認する、といった場面で使えます。」
1. 差(サ)とは?
差(サ)とは、データベース(データを管理するシステム)における表(テーブル)の集合演算のひとつです。英語では「Difference(ディファレンス)」と呼ばれます。集合演算とは、数学の集合と同じ考え方をデータベースに応用したもので、和(ユニオン)、積(インターセクション)、差(ディファレンス)などがあります。
差の操作は「A − B」と表され、一方の表Aには存在するが、表Bには存在しない行(レコード)を抽出するのが特徴です。つまり、「片方にしかないデータを見つける操作」なのです。
2. 差の読み方と意味
差は、読み方は差(サ)といいます。英語表記はDifference(ディファレンス)です。データベース分野では「差集合(サシュウゴウ)」とも呼ばれることがあります。
意味としては「違いを取り出す操作」です。例えば、会社の人事データベースで「全社員リスト」から「今月退職した社員リスト」を引くと「在籍している社員リスト」が求められるようになります。
3. 差の具体例
イメージしやすいように具体例を見てみましょう。例えば次のような二つの表があるとします。
表A(会員リスト)
ID | 名前
1 | 佐藤
2 | 鈴木
3 | 高橋
4 | 田中
表B(退会者リスト)
ID | 名前
2 | 鈴木
4 | 田中
この場合、「表A − 表B」を計算すると次の結果になります。
結果(在籍会員リスト)
ID | 名前
1 | 佐藤
3 | 高橋
このように、表Aには存在するが表Bには存在しないデータだけが取り出されます。これが差の基本的な考え方です。
4. 差のSQLでの書き方
SQL(エスキューエル、Structured Query Languageの略、読み方はストラクチャードクエリランゲージ)は、データベースに命令を出すための言語です。差を表現するには、標準SQLではEXCEPT(エクセプト)を使います。
SELECT ID, 名前 FROM 会員
EXCEPT
SELECT ID, 名前 FROM 退会者;
これにより、会員テーブルにはあるけれど退会者テーブルにはないレコードが抽出されます。ただし、データベース製品によってはEXCEPTではなくMINUS(マイナス)を使う場合もあります。例えばOracle(オラクル)ではMINUSを使います。
5. 差の使いどころ
差は現実の業務でもよく利用されます。例えば次のような場面です。
- 在庫リストから出荷済みリストを引いて、まだ出荷していない商品を確認する
- 全社員リストから退職者リストを引いて、現在在籍している社員を求める
- 登録済みユーザーから有料会員を引いて、無料ユーザーだけを取り出す
このように差を使うと、「対象から特定の条件を満たすものを除外した結果」を簡単に求めることができます。
6. 差と他の集合演算の違い
差を正しく理解するためには、他の集合演算との違いを知っておくことも大切です。
- 和(ユニオン):二つの表をまとめてすべてのデータを取得する
- 積(インターセクション):両方の表に共通するデータだけを取得する
- 差(ディファレンス):一方にしかないデータを取得する
つまり、和は「全部まとめる」、積は「共通部分を取る」、差は「片方だけを取る」と覚えると理解しやすいでしょう。
7. 差の注意点
差を使うときにはいくつかの注意点があります。
- 差を取るためには、両方の表の列数やデータ型が一致している必要があります
- 結果は重複を除いた集合として扱われるのが基本です
- データベースの種類によって構文(EXCEPTやMINUS)が異なることに注意が必要です
この点を押さえておけば、差の操作を安心して使うことができます。