データベースの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の動作イメージ
■ 身近な例えで理解する:フォルダ整理の視点
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の使い分けを問われる |
■ 試験でのひっかけパターンに注意
午後試験では、「複数の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構文の最後に記述するのが正解です。