FE EXAM

集合演算(UNION)

複数の問合せ結果を和・積・差で組み合わせる演算。

INTERACTIVE VISUALIZATION
A(店舗)
B(ネット)
両方
演算
UNION
フェーズ
idle
結果の件数
シナリオ
ステップ1 / 5
STEP 1/52つの問合せ結果を用意するまず合わせたい2つの結果を用意します。A は店舗で買った顧客 {C1, C2, C3}、B はネットで買った顧客 {C2, C3, C4} です。両方は列の構成(顧客IDという1列)がそろっている必要があります。これから「店舗かネットのどちらかで買った顧客」を求めます。
A 店舗B ネットC1C2C3C4
結果テーブル
A = {C1, C2, C3}
B = {C2, C3, C4}
▶ を押すと結果が出ます。
SQL
SELECT id FROM store_buyers
UNION
SELECT id FROM net_buyers
解説

📌
集合演算とは

ABC1C2 C3C4

集合演算とは、2つ以上の問合せ結果を、和(どちらか)・積(両方)・差(一方のみ)で組み合わせて1つの結果にする演算です。SELECT 文の結果どうしを、上下につなげるように合成します。

身近な例で考えると、「店舗で買った顧客リスト」と「ネットで買った顧客リスト」を突き合わせる作業に似ています。どちらかで買った人、両方で買った人、店舗だけの人…を取り出せます。

組み合わせる結果どうしは、列の数とデータの型がそろっている必要があります。上のツールで▶ボタンを押すと、ベン図のどの領域が対象になり、結果テーブルにどの行が残るかを確認できます。

🔵
3種類の意味

UNIONINTERSECTEXCEPT

集合演算は主に次の3種類です。ベン図の「塗りつぶした領域」が、結果に残る部分です。
UNION(和集合):A か B のどちらかに含まれる。2つの円全体
INTERSECT(積集合):A にも B にも含まれる両方(共通部分)。中央の重なりだけ
EXCEPT(差集合):A にあって B にない一方のみ。A から重なりを除いた部分

注意点として、EXCEPT は引く順番で結果が変わります。「A EXCEPT B」は A だけにある要素、「B EXCEPT A」は B だけにある要素になります。UNION と INTERSECT は順番を入れ替えても結果は同じです。上のツールでシナリオを切り替えて、3つの領域の違いを見比べてみてください。

♻️
UNIONとUNION ALLの違い

どちらも「2つの結果を合わせる」点は同じですが、重複した行を取り除くかどうかが違います。

項目UNIONUNION ALL
重複した行1つにまとめるそのまま残す
例の件数4件6件
速さ遅め(除去処理あり)速い(除去なし)

UNION は重複を除いて「種類」を知りたいときに、UNION ALL は重複も含めた「件数」をそのまま扱いたいときや、もともと重複が出ないと分かっていて速さを優先したいときに使います。重複を消すには内部で並べ替え・突き合わせが必要になるため、UNION ALL のほうが処理が軽いのです。上のツールで「UNION(4件)」と「UNION ALL(6件)」の結果を切り替えて、件数の違いを確認してみてください。

練習問題

🎯
基本情報技術者 練習問題

Q1.集合演算(UNION/INTERSECT/EXCEPT)の説明として最も適切なものはどれか。
A.複数の問合せ結果を和・積・差で組み合わせる演算
B.1つの表を列ごとに分割する演算
C.行をグループにまとめて集計する演算
D.表に新しい列を追加する演算
Q2.INTERSECT の結果として正しいものはどれか。A={C1,C2,C3}、B={C2,C3,C4} のとき。
A.{C1, C2, C3, C4}
B.{C2, C3}
C.{C1}
D.{C4}
Q3.UNION と UNION ALL の違いとして正しいものはどれか。
A.UNION は両方に共通する行だけを残す
B.UNION ALL は重複を取り除き、UNION は重複を残す
C.UNION は重複を取り除き、UNION ALL は重複もそのまま残す
D.両者はまったく同じ結果になる

関連コンテンツ