複数の問合せ結果を和・積・差で組み合わせる演算。
集合演算とは、2つ以上の問合せ結果を、和(どちらか)・積(両方)・差(一方のみ)で組み合わせて1つの結果にする演算です。SELECT 文の結果どうしを、上下につなげるように合成します。
身近な例で考えると、「店舗で買った顧客リスト」と「ネットで買った顧客リスト」を突き合わせる作業に似ています。どちらかで買った人、両方で買った人、店舗だけの人…を取り出せます。
組み合わせる結果どうしは、列の数とデータの型がそろっている必要があります。上のツールで▶ボタンを押すと、ベン図のどの領域が対象になり、結果テーブルにどの行が残るかを確認できます。
集合演算は主に次の3種類です。ベン図の「塗りつぶした領域」が、結果に残る部分です。
・UNION(和集合):A か B のどちらかに含まれる。2つの円全体
・INTERSECT(積集合):A にも B にも含まれる両方(共通部分)。中央の重なりだけ
・EXCEPT(差集合):A にあって B にない一方のみ。A から重なりを除いた部分
注意点として、EXCEPT は引く順番で結果が変わります。「A EXCEPT B」は A だけにある要素、「B EXCEPT A」は B だけにある要素になります。UNION と INTERSECT は順番を入れ替えても結果は同じです。上のツールでシナリオを切り替えて、3つの領域の違いを見比べてみてください。
どちらも「2つの結果を合わせる」点は同じですが、重複した行を取り除くかどうかが違います。
| 項目 | UNION | UNION ALL |
|---|---|---|
| 重複した行 | 1つにまとめる | そのまま残す |
| 例の件数 | 4件 | 6件 |
| 速さ | 遅め(除去処理あり) | 速い(除去なし) |
UNION は重複を除いて「種類」を知りたいときに、UNION ALL は重複も含めた「件数」をそのまま扱いたいときや、もともと重複が出ないと分かっていて速さを優先したいときに使います。重複を消すには内部で並べ替え・突き合わせが必要になるため、UNION ALL のほうが処理が軽いのです。上のツールで「UNION(4件)」と「UNION ALL(6件)」の結果を切り替えて、件数の違いを確認してみてください。