データベースの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」にする場合は、単に UNION を UNION ALL に置き換えるだけです。
■ UNIONとUNION ALLの違い(表で整理)
| 項目 | UNION | UNION ALL |
|---|---|---|
| 重複行の扱い | 自動的に削除 | そのまま残す |
| パフォーマンス | 遅い(重複削除にコスト) | 速い |
| 主な用途 | 重複除外が必要な集計 | 全データを確認したい場面 |
| 試験でのポイント | 意図が明確ならこちら | デフォルトならALLが問われやすい |
■ 図解:UNIONとUNION ALLの動作イメージ
図1:UNION のイメージ(重複削除)
テーブルA テーブルB
+------+-------+ +------+-------+
| 名前 | 売上 | | 名前 | 売上 |
+------+-------+ +------+-------+
| 田中 | 100 | | 田中 | 100 |
| 鈴木 | 150 | | 山田 | 200 |
+------+-------+ +------+-------+
↓ (UNION)
重複を削除してユニークな行だけ残る
+------+-------+
| 名前 | 売上 |
+------+-------+
| 田中 | 100 |
| 鈴木 | 150 |
| 山田 | 200 |
+------+-------+
図2:UNION ALL のイメージ(重複も残す)
テーブルA テーブルB
+------+-------+ +------+-------+
| 名前 | 売上 | | 名前 | 売上 |
+------+-------+ +------+-------+
| 田中 | 100 | | 田中 | 100 |
| 鈴木 | 150 | | 山田 | 200 |
+------+-------+ +------+-------+
↓ (UNION ALL)
重複もそのまま出力
+------+-------+
| 名前 | 売上 |
+------+-------+
| 田中 | 100 |
| 鈴木 | 150 |
| 田中 | 100 | ← 重複も残る
| 山田 | 200 |
+------+-------+
要点
- UNION:全列が同一の行は重複として削除(ユニーク化)
- UNION ALL:重複行も削除せず全て出力(高速)
■ 身近な例えで理解する:フォルダ整理の視点
2つのフォルダ(SELECT文)があるとしましょう。両フォルダには一部同じ名前のファイルがあります。これを1つのフォルダにまとめる場合…
- UNION:重複するファイルは1つだけ残して整理(重複削除)
- UNION ALL:重複があってもすべて残す(すべてを確認)
このように、「整理するか」「全部残すか」の違いを意識すると、試験でも直感的に選べるようになります。
UNION/UNION ALLが出る穴埋め問題の出題傾向│SQL文脈パターン別攻略
応用情報技術者やデータベーススペシャリストの午後問題では、SELECT文の一部が空欄になっており、「UNION」か「UNION ALL」を補う形式が頻出です。このとき問われるのは、「どちらを選ぶべきか」という判断力と、「文脈の読解力」です。
■ 出題されやすいパターン
- 同じ列構成の2つのSELECT文が並ぶ
→ UNION系で統合される。FROM句のテーブル名やWHERE句の条件が異なる場合に注意。 - 最終的に重複を排除すべき意図が記述で明示されている
→ 「同じデータは1つにまとめる必要がある」などと書かれている場合はUNION。 - 重複が許容・必要なケース
→ 「売上データをすべて集計」「ログをそのまま出力」などの記述があると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の使い分けを問われる |
■ 試験でのひっかけパターンに注意
JOINは「横方向の結合」であり、列の数が一致している必要はありません。複数のテーブルの列を結合条件(ON句など)に基づいて横に並べる仕組みです。
一方、UNIONは「縦方向の結合」であり、複数のSELECT文を積み上げるため、列数やデータ型が一致していなければなりません。
午後試験では、この違いを利用して「複数のSELECT文が同じ列構成」=UNION であるべきところを、あえて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構文の最後に記述するのが正解です。