UNIONとは?SQL初心者向けに基本から使い方までわかりやすく解説

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の位置が正しいか

確認する順番

  1. 各SELECT文を単独で実行する
  2. 列数が一致しているか確認する
  3. データ型を確認する
  4. UNIONで結合する
  5. 必要に応じて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の活用範囲がさらに広がります。

コメント

タイトルとURLをコピーしました