検索結果を統合(和集合)する
複数の検索結果を統合し、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 |
+--------+
6 rows in set (0.00 sec)
佐藤さん(1002)と橋本さん(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 |
+--------+
8 rows in set (0.00 sec)
佐藤さん(1002)と橋本さん(1004)は、サッカーチームと野球チームの両方に所属していますが、UNION ALLで統合したため、重複したレコードも取得しています。