基本情報技術者試験 (FE) 科目 A — データベース
集合演算 — UNION・EXCEPT・INTERSECT
集合演算は 2 つの問合せ結果を集合として組み合わせる。UNION は和、EXCEPT は差、INTERSECT は積を返す。列数と対応する列の型が揃っている必要があり、UNION ALL 以外は重複を取り除く。
問合せの結果どうしを足し引きする
集合演算は、2 つの SELECT の結果を集合として扱い、 和・差・積を求める操作です。関係代数の集合演算がそのまま SQL になっています。
| SQL | 関係代数 | 意味 |
|---|---|---|
UNION | 和 | どちらかにある行(重複は 1 つに) |
EXCEPT | 差 | 左にあって右に無い行 |
INTERSECT | 積 | 両方にある行 |
製品によっては EXCEPT を MINUS と書きます (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 は左から右を引く(順番を入れ替えると結果が変わる)こと
よくある疑問
「集合演算」の練習問題 1 問
読んだ内容がそのまま出題されます。解答すると解説と、 その SQL を実行シミュレーターで開くリンクが出ます。
自由に試す / 他のレッスンを読む
データベース分野をもっと学ぶ(おすすめ書籍)
イラスト主体で科目Aの全範囲を通読できる入門書。用語の土台を作ってから科目Bのアルゴリズムに入ると理解が速い。
科目Aの頻出テーマを図と語呂で押さえる入門書。参考書と問題集を兼ねるので初受験の一冊目に選びやすい。
公開問題を大量に解いて仕上げるための問題集。擬似言語の読解に慣れた後、本番形式で時間配分を試す段階で使う。
本セクションはAmazonアソシエイトのリンクを含みます。
プログラムの読み方でつまずいたら。
たいてっくが、アルゴリズムの追い方から SQL・データベース設計まで、1対1で学習をサポートします。「コードを目で追っても何をしているか分からない」段階からで大丈夫です。まずは無料相談から。
「教え方も上手で、お人柄も良いメンターです。DB周りの知識はもちろん、何より、しっかり教えてあげようという姿勢がとてもありがたかったです。データベース、SQLの学習を考えている方にはおススメです。」
— H 様(DB・SQL コース受講)「体系的に知識を教えてくださり、実際の業務でも大変役立っております。特に短い時間で効率よく知識の習得や、練習をできているのは期待以上でした。」
— M 様(DB・SQL コース受講)「大変充実したコンテンツでわかりやすいご説明をありがとうございました。基本的な質問にも丁寧にご説明いただき、また業務のご相談にも乗って頂き大変有意義な時間でした。」
— K 様(DB・SQL コース受講)