ADHDの転職と資格取得

UNION/UNION ALLのSQL問題対策│午後試験で狙われる文脈と選び方

データベースのSQL構文において、「UNION」と「UNION ALL」は“データの統合”を行う重要なキーワードです。特に応用情報技術者試験やデータベーススペシャリスト試験の午後問題では、穴埋め形式で「UNION」か「UNION ALL」のどちらを使うべきかを問われるケースが頻出です。

どちらも「複数のSELECT文の結果をまとめる」役割を果たしますが、重複の扱い実行速度意図する結果の違いなど、細かい仕様の差があります。これらの違いを曖昧なままにしておくと、「なぜこちらを使うべきか」という理由が説明できず、得点につながりにくくなってしまいます。

また、混同しやすい概念に「JOIN」があります。「JOIN」もデータを結合する構文ですが、行(レコード)を横に結合するのに対し、「UNION」は縦に統合するという本質的な違いがあります。この点も試験ではひっかけとして狙われやすく、両者の役割の違いを明確に理解しておく必要があります。

この記事では、試験での出題傾向を踏まえながら、「UNION」「UNION ALL」そして「JOIN」との違い・使いどころを体系的に解説します。加えて、直感的に理解しやすいように図解・表・具体例も交えて、文脈ごとの判断ポイントを整理します。

「似たような構文だけど、どっちを選べばいいのか分からない」──そんな悩みをこの記事で一気に解消していきましょう。

UNIONとUNION ALLの基本構文と違い│SQL試験対策に必要な前提知識

SQLにおける「UNION」と「UNION ALL」は、複数のSELECT文の結果を縦方向に統合するための構文です。どちらも「列の構造が一致しているSELECT文」に対して使用できますが、動作には明確な違いがあります。

■ 基本構文


SELECT 列名1, 列名2 FROM テーブルA
UNION
SELECT 列名1, 列名2 FROM テーブルB;

「UNION ALL」にする場合は、単に UNIONUNION ALL に置き換えるだけです。

■ UNIONとUNION ALLの違い(表で整理)

項目 UNION UNION ALL
重複行の扱い 自動的に削除 そのまま残す
パフォーマンス 遅い(重複削除にコスト) 速い
主な用途 重複除外が必要な集計 全データを確認したい場面
試験でのポイント 意図が明確ならこちら デフォルトならALLが問われやすい

■ 図解:UNIONとUNION ALLの動作イメージ

■ 身近な例えで理解する:フォルダ整理の視点

2つのフォルダ(SELECT文)があるとしましょう。両フォルダには一部同じ名前のファイルがあります。これを1つのフォルダにまとめる場合…

  • UNION:重複するファイルは1つだけ残して整理(重複削除)
  • UNION ALL:重複があってもすべて残す(すべてを確認)

このように、「整理するか」「全部残すか」の違いを意識すると、試験でも直感的に選べるようになります。

UNION/UNION ALLが出る穴埋め問題の出題傾向│SQL文脈パターン別攻略

応用情報技術者やデータベーススペシャリストの午後問題では、SELECT文の一部が空欄になっており、「UNION」か「UNION ALL」を補う形式が頻出です。このとき問われるのは、「どちらを選ぶべきか」という判断力と、「文脈の読解力」です。

■ 出題されやすいパターン

  1. 同じ列構成の2つのSELECT文が並ぶ
    → UNION系で統合される。FROM句のテーブル名やWHERE句の条件が異なる場合に注意。
  2. 最終的に重複を排除すべき意図が記述で明示されている
    → 「同じデータは1つにまとめる必要がある」などと書かれている場合は UNION
  3. 重複が許容・必要なケース
    → 「売上データをすべて集計」「ログをそのまま出力」などの記述があると UNION ALL

■ SQL文の文脈から読み取るポイント

穴埋め問題では、以下のような文脈ヒントがよく登場します。

  • 「重複しないように…」「1つにまとめる」→ UNION
  • 「すべてのデータを」「統合ログを出力する」→ UNION ALL
  • GROUP BY や COUNT(*) を含むSELECT文→ どちらでもよいが、UNIONだと重複が除かれて二重カウントを防げる

■ 試験で狙われやすいひっかけポイント

  • SELECT句だけ見て安易に判断すると失点:文中の要件・注釈に注目
  • UNIONとJOINの選択肢が混ざる問題:JOINは行の横結合なので、明らかに列数が異なれば除外可能
  • UNION ALLが明示されておらず、デフォルトでUNIONと誤解させる:ALLの記述がないことに注意

■ 練習例(出題パターンを想定)


(設問)
2つの売上データ表(sales_a, sales_b)を統合し、重複のない売上一覧を取得したい。
以下の(   )に適切なSQLキーワードを補え。

SELECT product_id, amount FROM sales_a
(   )
SELECT product_id, amount FROM sales_b;

→ 解答:UNION

このように、設問中の「重複しないように」がキーワードとなります。

UNION/UNION ALLとJOINの違い│縦と横の結合の本質的な違いを図解

SQLで「データを結合する」と聞くと、多くの人がまず思い浮かべるのが「JOIN」です。しかし「UNION」や「UNION ALL」も結合に使われる構文です。混同しやすいこの2系統の違いを正しく理解するには、“縦に統合するか、横に結合するか”という発想が重要です。

■ 処理の方向:UNION系は“縦”、JOINは“横”

UNION/UNION ALL は「SELECT文の結果(行)」を縦に積み重ねる処理です。一方、JOINは複数のテーブルをキーを使って横に結びつける処理です。

■ 図解:UNIONとJOINの構造的違い

 

■ 表で比較:UNION系 vs JOIN

項目 UNION/UNION ALL JOIN
処理方向 縦方向に行を統合 横方向に列を結合
結合条件 不要(列数とデータ型が一致すればOK) 必要(主キーや外部キーの対応)
前提となる列数 各SELECT文の列数・データ型が一致 一致している必要はない(JOIN条件で合わせる)
典型的な用途 ログや売上データの統合 顧客情報と注文情報の結合など
試験での狙われ方 UNIONとUNION ALLの選択肢に注意 ON条件やINNER/LEFTの使い分けを問われる

■ 試験でのひっかけパターンに注意

午後試験では、「複数のSELECT文が同じ列構成」で並んでいるときに、JOINと誤認させる選択肢が紛れていることがあります。JOINはキーの一致が前提であり、列の数が合っていなければ不自然です。これに気づくことが、選択肢を見極めるカギとなります。

■ 身近な例え:JOINは「名簿を照らし合わせる」、UNIONは「名簿をまとめる」

  • JOIN:クラス名簿と成績表を照らし合わせて、1人ずつ詳細を紐づける
  • UNION:1組と2組の名簿を1つに統合する(重複があればUNION/すべて残すならUNION ALL)

JOINは「関係性の照合」、UNIONは「全体の拡張」と捉えると覚えやすいです。

UNION/UNION ALLと併用されるSQLキーワード一覧│GROUP BY・ORDER BY・DISTINCTなど

SQLの構文は複数のキーワードを組み合わせて使われることが一般的です。「UNION」や「UNION ALL」も例外ではなく、GROUP BY・ORDER BY・DISTINCT・LIMITなどと併用されることが多く、これらの組み合わせが午後試験でも問われます。

■ よく併用されるSQLキーワードとその役割

キーワード 主な役割 UNION系との関係
GROUP BY 集計・グループ化 UNION前後どちらにも使える。
ただし統合結果をさらに集計する場合はUNION後に使用。
ORDER BY 並び替え UNION全体に適用する場合、最後のSELECT文の後に1回だけ使用する。
DISTINCT 重複行の除外 UNION自体が重複を除くので、併用すると無駄または誤解の原因に。
LIMIT 表示件数の制限 UNION全体で何件取得するかの制御に使える。

■ 試験で狙われやすい組み合わせと注意点

  • ORDER BYの位置:UNIONのそれぞれのSELECT文にORDER BYをつけてはいけない(構文エラー)
  • DISTINCTの重複排除とUNIONの混同:「UNION DISTINCT」などの表記は存在しない。UNIONは常に重複除去
  • GROUP BYとUNIONの順序:個別に集計するか、統合後に集計するかで意図が変わる

■ 例:ORDER BYは最後に1回だけ


SELECT name FROM customers
UNION
SELECT name FROM suppliers
ORDER BY name;

このように、ORDER BYはUNION構文の最後に記述するのが正解です。

-ADHDの転職と資格取得