検索結果を統合(和集合)する
複数の検索結果を統合し、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) ※PK | playerテーブルのID (userId) |
1 | 1001 |
2 | 1002 |
3 | 1004 |
4 | 1005 |
【baseballテーブル】※野球チームに所属しているメンバーを管理
ID (id) ※PK | playerテーブルのID (userId) |
1 | 1002 |
2 | 1003 |
3 | 1004 |
4 | 1006 |
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円 |
MySQL徹底入門 第4版 MySQL 8.0対応
2011年刊行の『MySQL 徹底入門 第3版』の改訂版です。
メジャーバージョンアップした8.0に対応。
旧版の内容を全面的に見直して書下ろし。
改訂にあたり、新機能についてはデータベース担当者が必要となる部分を中心にピックアップ!
運用・データ型・レプリケーション・文字コードなどの実務で役立つ内容もバランスよく解説します。
学習書のお求めはこちらから → 全国送料無料!IT書、ビジネス書、資格書が豊富なSEshop