SQLの集合演算(UNION・INTERSECT・EXCEPT)とは?えすきゅーえるのしゅうごうえんざん
SQLの集合演算(UNION・INTERSECT・EXCEPT)とは、複数のSELECT文の結果を行の集合とみなして組み合わせる演算。UNIONは和集合で重複行を1行にまとめ、UNION ALLは重複をそのまま残す。INTERSECTは両方に現れる行を、EXCEPT(OracleではMINUS)は左の結果から右にある行を除いた差集合を返す。いずれも各SELECTの列数が同じで、対応する列のデータ型が揃っていることが前提になる。
最終更新:2026-10-06
この語が出る過去問を解く →背景
表を横へ広げる結合(JOIN)だけでは、「Aにあって Bにない」「AとBの両方にある」といった集合としての比較を素直に書けず、NOT EXISTSや外部結合とIS NULLの組合せに頼ることになる。集合演算は、関係モデルが土台に置く集合の考え方をそのままSQLの構文へ持ち込んだもので、意図が読める形で書ける点に価値がある。応用情報では、同じ結果を返す複数の書き方から意図の明確なものを選ばせる形で出る。
具体例
会員制サービスの分析で、「今月の購入者」と「先月の購入者」を返す2つのSELECTをINTERSECTでつなげば2か月連続で購入した会員が、EXCEPTでつなげば先月は買ったが今月は買っていない離反候補が取れる。同じことをNOT EXISTSで書くと入れ子が深くなり、後から読む人に意図が伝わりにくい。
試験での引っ掛け
「ALLが付くほうが重い」と考えがちだが逆で、重複を消すためにソートやハッシュが要るUNIONのほうが遅い。EXCEPTは左右を入れ替えると別の結果になる非可換な演算で、UNIONやINTERSECTと同列に扱えない。集合演算が働くのは行の方向であり、列を横へ足すJOINとは向きが違う点も、選択肢の見分けどころになる。
関連用語
出た過去問
問題文で直接問われたものと、解説の中で触れられたものが含まれます。
出典:平成30年度 春期 応用情報技術者試験 午前 問27(IPA)解説で登場
関係Rと関係Sに対して、関係Xを求める関係演算はどれか。
正解:和
要点:和は両表の行を重複を除いて合わせる演算
関係Xは、RとSのどちらかに現れる行をすべて集めたものになっている。RとSに共通する行(0001,a,100)は重複を除いて1行だけ含まれており、これは和(UNION)演算の結果である。差ならRにあってSにない行だけ、直積なら行数が3×2=6行になるため、いずれも一致しない。
出典:令和2年度 10月試験 応用情報技術者試験 午前 問29(IPA)
"東京在庫"表と"大阪在庫"表に対して、SQL文を実行して得られる結果はどれか。ここで、実線の下線は主キーを表す。 〔SQL文〕 SELECT 商品コード, 在…
正解:商品コード・在庫数の組みが A001:50, B002:25, B002:15, C003:35, C003:35, D004:80 の6行の結果表
要点:UNION ALLは重複を除かずに結果を単純連結する
UNION ALLは2つの問合せ結果を単純に連結し、重複行を取り除かない。東京在庫の3行と大阪在庫の3行がそのまま並ぶので、結果は6行になる。重複を除きたい場合はALLを付けないUNIONを使う。
出典:令和3年度 秋期 応用情報技術者試験 午前 問26(IPA)解説で登場
関係Rと関係Sに対して、関係Xを求める関係演算はどれか。
正解:和
要点:同じ列構成の関係の行を重複なく合わせる演算が和
関係Xの内容は、関係Rの3行と関係Sの2行を合わせ、重複する行を1つにまとめたものになっている。これは集合演算の和(UNION)の結果である。和・差・積(共通)はいずれも和両立(同じ属性構成)である関係どうしに適用できる演算である。
出典:令和3年度 秋期 応用情報技術者試験 午前 問29(IPA)
“部門別売上”表から、部門コードごと、期ごとの売上を得るSQL文はどれか。
正解:SELECT 部門コード, '第1期' AS 期, 第1期売上 AS 売上 FROM 部門別売上 UNION (SELECT 部門コード, '第2期' AS 期, 第2期売上 AS 売上 FROM 部門別売上) ORDER BY 部門コード, 期
要点:横持ちを縦持ちに変換するにはUNIONで行を連結する
1行に第1期と第2期の売上が横に並んだ表を、期ごとの縦持ちに変換したい。第1期を取り出す問合せと第2期を取り出す問合せをそれぞれ作り、UNIONで行方向に連結すれば求める結果になる。UNIONは列数と列のデータ型が一致していれば結果を縦に結合できる。
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。