UNIONとは?SQL初心者向けに基本から使い方までわかりやすく解説
UNION(ユニオン)とは、複数のSELECT文の検索結果を1つにまとめるSQLの機能です。
JOINが「横方向(列)」にデータを結合するのに対し、UNIONは縦方向(行)にデータを結合します。社内SEや運用保守、データ分析などのIT業務では、複数のテーブルや検索結果を一覧として表示したい場面でよく利用されます。
UNIONとは?
UNIONは、SQL(Structured Query Language)の演算子の一つです。
複数のSELECT文の実行結果を1つの結果セットとしてまとめて表示できます。
例えば、「東京支店の社員一覧」と「大阪支店の社員一覧」を1つの一覧として表示したい場合に利用します。
UNIONはどんな場面で使われるのか
実際のIT現場では、次のような業務で利用されています。
- 複数の部署の社員一覧をまとめる
- 年度ごとに分かれた売上データを一覧表示する
- 複数のシステムから取得したログを統合する
- 異なるテーブルの顧客情報をまとめて表示する
- アーカイブテーブルと現行テーブルをまとめて検索する
なぜUNIONが重要なのか
業務システムでは、データが複数のテーブルに分かれて保存されていることがあります。
それぞれのテーブルを個別に検索すると管理しにくいため、UNIONを使用して1つの一覧として表示します。
レポート作成やデータ分析でもよく利用される機能です。
UNIONのイメージ
東京支店テーブル
| 社員ID | 氏名 |
|---|---|
| 1001 | 山田 |
| 1002 | 佐藤 |
大阪支店テーブル
| 社員ID | 氏名 |
|---|---|
| 2001 | 鈴木 |
| 2002 | 田中 |
UNIONを実行すると次のようになります。
| 社員ID | 氏名 |
|---|---|
| 1001 | 山田 |
| 1002 | 佐藤 |
| 2001 | 鈴木 |
| 2002 | 田中 |
このように、複数の検索結果が縦に連結されます。
UNIONの基本構文
SELECT 氏名 FROM 東京支店 UNION SELECT 氏名 FROM 大阪支店;
SELECT文の列数とデータ型は一致している必要があります。
UNION ALLとの違い
| 比較項目 | UNION | UNION ALL |
|---|---|---|
| 重複データ | 削除する | 削除しない |
| 処理速度 | やや遅い | 速い |
| 利用目的 | 重複を除いた一覧 | すべて表示 |
初心者はUNIONは重複を自動で削除すると覚えておくと理解しやすくなります。
JOINとの違い
| 比較項目 | JOIN | UNION |
|---|---|---|
| 結合方法 | 横(列) | 縦(行) |
| 用途 | 複数テーブルを関連付ける | 検索結果をまとめる |
| 結合条件 | 必要 | 不要 |
JOINは「列を増やす」、UNIONは「行を増やす」と考えると違いが分かりやすくなります。
実際のIT現場での利用例
| 業務 | 利用例 |
|---|---|
| 社員管理 | 支店ごとの社員一覧を統合する |
| 売上分析 | 月別売上データをまとめる |
| ログ管理 | 複数サーバーのログを統合する |
| 顧客管理 | 現行顧客と過去顧客を一覧表示する |
| データ移行 | 新旧システムのデータを比較する |
業務でよくあるトラブル
列数が一致しないエラー
UNIONするSELECT文の列数が異なる場合に発生します。
データ型が一致しない
数値型と文字列型など、互換性のないデータ型ではエラーになることがあります。
重複データが消えてしまう
UNIONは重複を自動的に削除するため、すべて表示したい場合はUNION ALLを使用します。
原因の切り分け
| 確認項目 | 確認内容 |
|---|---|
| 列数 | すべてのSELECT文で一致しているか |
| データ型 | 同じデータ型になっているか |
| 列の順番 | 同じ順番で取得しているか |
| 重複データ | UNION ALLが必要ではないか |
| 並び順 | ORDER BYの位置が正しいか |
確認する順番
- 各SELECT文を単独で実行する
- 列数が一致しているか確認する
- データ型を確認する
- UNIONで結合する
- 必要に応じてORDER BYを追加する
GUIでの確認方法
- SQL Server Management Studio(SSMS)
- MySQL Workbench
- DBeaver
- pgAdmin
- Oracle SQL Developer
各SELECT文を個別に実行してからUNIONすると、問題点を見つけやすくなります。
CUI(コマンド)での確認方法
- mysql
- sqlcmd
- psql
- SQL*Plus
コマンドラインからSQLを実行して結果を確認できます。
ログの確認方法
UNIONの実行内容はWindowsイベントログには記録されません。
SQLエラーが発生した場合は、データベースサーバーのエラーログや実行ログを確認します。
イベントビューアーの確認方法
通常は不要です。
データベースサービスの異常や接続エラーが発生している場合のみ、Windowsイベントビューアーを確認します。
PowerShellで確認できること
- データベースサービスの状態確認
- サーバーへの接続確認
- TCPポートの疎通確認
- サービスの起動状態確認
ショートカットキー
| キー | 用途 |
|---|---|
| F5 | SQL実行(SSMS) |
| Ctrl + A | 全文選択 |
| Ctrl + C | 実行停止 |
| Ctrl + F | 検索 |
初心者がやりがちなミス
- JOINとUNIONを混同する
- 列数が違うまま実行する
- データ型が一致していない
- UNION ALLとの違いを理解していない
- ORDER BYを各SELECT文に記述してしまう
筆者の経験談
運用保守で過去データと現行データを比較する際、UNIONを使用したことで重複データが自動的に削除され、件数が合わないというトラブルがありました。
原因を調査すると、本来はすべてのデータを表示する必要があり、UNIONではなくUNION ALLを使用すべきケースでした。この経験から、重複データを残す必要があるかどうかを事前に確認するようになりました。
上司へ報告するポイント
- 実行したSQL
- 結合したSELECT文の数
- 取得件数
- UNIONとUNION ALLのどちらを使用したか
- 重複データの有無
- 業務への影響範囲
エスカレーションするタイミング
- 大量データで処理時間が長い場合
- データ件数が大きく異なる場合
- 本番データの修正が必要な場合
- 原因が特定できない場合
新人が覚えておくべきポイント
- UNIONは検索結果を縦方向にまとめる。
- JOINとは用途が異なる。
- 列数とデータ型は一致させる必要がある。
- UNIONは重複データを削除する。
- 重複も必要ならUNION ALLを使用する。
関連するIT用語
- SQL(Structured Query Language)
- SELECT
- JOIN
- INNER JOIN
- LEFT JOIN
- UNION ALL
- ORDER BY
- WHERE
よくある質問(FAQ)
UNIONとJOINは何が違いますか?
JOINは複数のテーブルを横方向(列)に結合します。一方、UNIONは複数の検索結果を縦方向(行)に結合します。
UNION ALLとの違いは何ですか?
UNIONは重複データを削除しますが、UNION ALLは重複データもそのまま表示します。
UNIONするSELECT文の条件はありますか?
すべてのSELECT文で列数が同じであり、対応する列のデータ型に互換性がある必要があります。
まとめ
UNIONは、複数のSELECT文の検索結果を縦方向にまとめるSQLの機能です。
JOINとは目的が異なり、支店ごとのデータや年度別データなどを1つの一覧にまとめたい場合に活躍します。
まずは「UNIONは重複を削除する」「JOINは列を結合し、UNIONは行を結合する」というポイントを理解することで、SQLの活用範囲がさらに広がります。
