データベース設計

【SQL入門】UNION、UNION ALLの使い方

検索結果を統合(和集合)する

複数の検索結果を統合し、1つの結果にするには「UNION」または「UNION ALL」を使用します。

「UNION」は下図のように和集合を求める構文です。(Aの取得結果とBの取得結果を統合)

「UNION」と「UNION ALL」の違いは、重複を含めるかどうかです。

  • UNION:重複を含めない(重複があったら除外
  • UNION ALL:重複を含む(すべて抽出

本記事では、「UNION」の使い方について解説していきます。

また、次のようなデータが格納されていることを前提として説明していきます。

【playerテーブル】※選手の情報を管理

ID (id) ※PK名前 (name)年齢 (age)
1001鈴木25
1002佐藤27
1003田中35
1004橋本29
1005山本40
1006武田22

【footballテーブル】※サッカーチームに所属しているメンバーを管理

ID (id) ※PKplayerテーブルのID (userId)
11001
21002
31004
41005

【baseballテーブル】※野球チームに所属しているメンバーを管理

ID (id) ※PKplayerテーブルのID (userId)
11002
21003
31004
41006

UNIONの使い方

「UNION」を使うことで、複数の検索結果を統合し1つの結果として取得することができます。

UNIONの基本構文

SELECT  列名  FROM  テーブル名1
UNION
SELECT  列名  FROM  テーブル名2

次の例では、サッカーチーム(baseballテーブル)と野球チーム(baseballテーブル)のいずれかに所属しているメンバーを取得しています。

■UNIONの使用例

SELECT  userId  FROM  football
UNION
SELECT  userId  FROM  baseball;

■実行結果

+--------+
| userId |
+--------+
|   1001 |
|   1002 |
|   1004 |
|   1005 |
|   1003 |
|   1006 |
+--------+

ID:(1002)と ID:(1004)は、サッカーチームと野球チームの両方に所属していますが、UNIONで統合したため、重複したレコードは1つのレコードとして統合されます。

UNION ALLの使い方

「UNION ALL」を使うことで、複数の検索結果を統合し1つの結果として取得することができます。

UNIONの基本構文

SELECT  列名  FROM  テーブル名1
UNION ALL
SELECT  列名  FROM  テーブル名2

次の例では、サッカーチーム(baseballテーブル)と野球チーム(baseballテーブル)のいずれかに所属しているメンバーを取得しています。

■UNION ALLの使用例

SELECT userId FROM football
UNION ALL
SELECT userId FROM baseball;

■実行結果

+--------+
| userId |
+--------+
|   1001 |
|   1002 |
|   1004 |
|   1005 |
|   1002 |
|   1003 |
|   1004 |
|   1006 |
+--------+

ID(1002)とID(1004)は、サッカーチームと野球チームの両方に所属していますが、UNION ALLで統合したため、重複したレコードも取得しています。

学習書の紹介

MySQL徹底入門 第4版 MySQL 8.0対応 [ yoku0825 ]

価格:4,180円
(2023/8/20 16:19時点)

MySQL徹底入門 第4版 MySQL 8.0対応

2011年刊行の『MySQL 徹底入門 第3版』の改訂版です。
メジャーバージョンアップした8.0に対応。
旧版の内容を全面的に見直して書下ろし。
改訂にあたり、新機能についてはデータベース担当者が必要となる部分を中心にピックアップ!
運用・データ型・レプリケーション・文字コードなどの実務で役立つ内容もバランスよく解説します。

学習書のお求めはこちらから → 全国送料無料!IT書、ビジネス書、資格書が豊富なSEshop

-データベース設計