UNION / INTERSECT / EXCEPTとは?ユニオン・インターセクト・エクセプト
UNION / INTERSECT / EXCEPTとは、2つの問合せ結果を集合として和・共通・差にまとめる演算子。既定では結果から重複行が取り除かれ、ALLを付けると重複が残る。両側の列数が同じで、対応する列のデータ型が比較可能であることが前提で、結果の列名は左側の問合せのものが使われる。
最終更新:2026-10-06
この語が出る過去問を解く →背景
関係モデルの土台が集合論であり、和・差・直積は関係代数の基本演算として最初から備わっている。一方でSQLの表は重複行を許すバッグ(多重集合)なので、集合演算だけが既定で重複を除くという食い違いが残った。ALLの有無で結果も実行計画も変わるため、この折り合いの部分がそのまま出題点になっている。
具体例
部品構成表で、子部品コードの集合から親部品コードの集合をEXCEPTで引くと、下位を持たない末端部品が求まる。同じ演算をOracle DatabaseではMINUSと綴る。会員表と休会会員表の共通部分を取るならINTERSECTを使う。
試験での引っ掛け
差は向きがある(A EXCEPT BとB EXCEPT Aは別物)のに対し、和と共通は向きが無い。UNIONは重複除去のために整列やハッシュが走るので、重複が起きないと分かっている場合はUNION ALLのほうが速い(結果が同じでもコストは違う)。結合が列を横に増やすのに対し、集合演算は行を縦に足すという向きの違いも取り違えやすい。
関連用語
出た過去問
問題文で直接問われたものと、解説の中で触れられたものが含まれます。
出典:平成28年度 春期 データベーススペシャリスト試験 午前Ⅱ 問15(IPA)解説で登場
関係AとBに対して和集合演算が成立するための必要十分条件はどれか。
正解:次数が同じで、対応する属性のドメインが等しい。
要点:和集合には次数と対応属性のドメイン一致(合併両立)が必要
和・差・共通部分といった集合演算は、二つの関係が合併両立(union compatible)であることが条件になる。すなわち属性の個数(次数)が同じで、対応する位置の属性のドメインが一致している必要がある。属性名の一致までは求められない。
出典:令和3年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問6(IPA)
"商品"表と"当月商品仕入合計"表に対して、SQL文を実行した結果はどれか。 商品(商品コード,仕入先コード): S001,K01 / S002,K01 / S…
正解:K02, K04
要点:EXCEPTは差集合。既定で重複も取り除かれる
EXCEPTは左側の問合せ結果から右側に現れる値を取り除く差集合演算で、ALLを付けない限り重複も取り除かれる。商品側の仕入先コードの集合から当月仕入合計にある仕入先を除くと、残るのは重複を排除した2件になる。よってエが結果となる。
出典:令和4年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問9(IPA)
SQL文1とSQL文2を実行した結果が同一になるために、表Rが満たすべき必要十分な条件はどれか。 〔SQL文1〕 SELECT * FROM R UNION S…
正解:重複する行は存在しない。
要点:UNIONは重複を除くので、重複行がなければ結果が一致
UNIONはALLを付けない限り結果から重複行を取り除く。同じ表同士を和集合にすると全行がいったん2つずつ現れ、重複除去によって1つにまとめられる。したがって単純な選択と結果が一致するのは、元の表にもともと重複行がない場合であり、これが必要十分条件になる。
出典:令和6年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問8(IPA)
図のツリー構造に対するデータを格納した"隣接リスト"表から、リーフノードを取得するSQL文のaに入れる字句はどれか。ここで、図の丸はノードを表し、矢印は親ノード…
正解:EXCEPT
要点:リーフ=子集合−親集合、差集合はEXCEPT
隣接リストで木を表すとき、子ノード列に現れる値の集合が「親を持つノード全体」、親ノード列に現れる値の集合が「子を持つノード全体」である。リーフは子を持たないノードなので、前者から後者を差し引けば得られる。この差集合を求める演算子がEXCEPTである。
出典:令和7年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問9(IPA)
"名簿1"表と"名簿2"表のそれぞれ対応する行が全て等しいかどうかを確認するSQL文のa, b, cに入れる適切な字句はどれか。 〔SQL文〕 SELECT C…
正解:a: UNION / b: EXCEPT / c: INTERSECT
要点:表の一致判定は対称差(和−共通)が空かで確かめる
2つの表が完全に一致するかは、互いの差集合を両方向で取り、どちらも空であることを確かめればよい。この設問の枠組みでは、和集合から共通部分を差し引いた対称差を作り、その件数が0かどうかで判定する。どちらか一方にしかない行があれば対称差に残るため、件数が0でなくなる。
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。