基本情報技術者試験 (FE) 科目 A — データベース

集合演算 — UNION・EXCEPT・INTERSECT

定義

集合演算は 2 つの問合せ結果を集合として組み合わせる。UNION は和、EXCEPT は差、INTERSECT は積を返す。列数と対応する列の型が揃っている必要があり、UNION ALL 以外は重複を取り除く。

問合せの結果どうしを足し引きする

集合演算は、2 つの SELECT の結果を集合として扱い、 和・差・積を求める操作です。関係代数の集合演算がそのまま SQL になっています。

SQL関係代数意味
UNIONどちらかにある行(重複は 1 つに)
EXCEPT左にあって右に無い行
INTERSECT両方にある行

製品によっては EXCEPTMINUS と書きます (Oracle 系)。試験では EXCEPT が使われます。

列数と型を揃える必要がある

-- OK: どちらも 1 列
SELECT 商品番号 FROM 商品
UNION
SELECT 商品番号 FROM 在庫

-- エラー: 左が 1 列、右が 2 列
SELECT 商品番号 FROM 商品
UNION
SELECT 商品番号, 倉庫 FROM 在庫

列名が違っていても構いませんが、列数と対応する位置の型は揃っている必要があります。 結果の列名は左側の SELECT のものが使われます。

試す: UNION を EXCEPT / INTERSECT に書き換えて結果を見比べる

リセットで表の中身も元に戻ります
エディタを読み込み中…

UNION は重複を消す

UNION は結果から重複行を取り除きます。 重複を残したい(または重複が無いと分かっている)場合はUNION ALL を使います。ALL を付けないと重複が消えるのがポイントで、 行数を問う問題で狙われます。

試す: ALL を消すと重複が消えて 5 行になる

リセットで表の中身も元に戻ります
エディタを読み込み中…

直積も集合演算のひとつ

シラバスでは集合演算として和・差・積・直積の 4 つが挙がっています。 直積は結合のレッスンで見た 「すべての行の組み合わせ」で、SQL では FROM 商品, 在庫 と 書くと得られます。

結合との違い

混同しやすいので整理しておきます。

  • 集合演算に足し引きする。列数は変わらない
  • 結合につなぐ。列が増える

試験で問われるポイント

  • UNION と UNION ALL の行数の違い
  • 和・差・積という日本語と SQL の対応。用語で問われます
  • 列数が揃っていない選択肢は誤りだと見抜けること
  • EXCEPT は左から右を引く(順番を入れ替えると結果が変わる)こと

よくある疑問

Q.UNION と UNION ALL の違いは何ですか?
A.UNION は結果から重複行を取り除きますが、UNION ALL は取り除きません。重複を消す処理が不要な分 UNION ALL のほうが速いため、重複しないと分かっている場合は ALL を付けます。
Q.集合演算と結合はどう違いますか?
A.集合演算は結果を縦に足したり引いたりする操作で、列数と型が揃っている必要があります。結合は横につなぐ操作で、列は増えます。「行が増えるのが集合演算、列が増えるのが結合」と覚えると混同しません。
Q.直積も集合演算ですか?
A.はい。シラバスでは集合演算として和・差・積・直積の 4 つが挙げられています。直積は SQL では FROM に表を並べる(または CROSS JOIN)ことで得られ、すべての行の組み合わせになります。

集合演算」の練習問題 1

読んだ内容がそのまま出題されます。解答すると解説と、 その SQL を実行シミュレーターで開くリンクが出ます。

自由に試す / 他のレッスンを読む

データベース分野をもっと学ぶ(おすすめ書籍)

本セクションはAmazonアソシエイトのリンクを含みます。

オンライン個別指導

プログラムの読み方でつまずいたら。

たいてっくが、アルゴリズムの追い方から SQL・データベース設計まで、1対1で学習をサポートします。「コードを目で追っても何をしているか分からない」段階からで大丈夫です。まずは無料相談から。

無料相談を予約する →
受講者の声 (DB・SQL コース)
menta レビュー原文を見る →
  • 教え方も上手で、お人柄も良いメンターです。DB周りの知識はもちろん、何より、しっかり教えてあげようという姿勢がとてもありがたかったです。データベース、SQLの学習を考えている方にはおススメです。
    H 様DB・SQL コース受講
  • 体系的に知識を教えてくださり、実際の業務でも大変役立っております。特に短い時間で効率よく知識の習得や、練習をできているのは期待以上でした。
    M 様DB・SQL コース受講
  • 大変充実したコンテンツでわかりやすいご説明をありがとうございました。基本的な質問にも丁寧にご説明いただき、また業務のご相談にも乗って頂き大変有意義な時間でした。
    K 様DB・SQL コース受講