【SQL】UNION、UNION ALL 複数のSELECT結果を統合する(和集合)
和集合
Oracleでは複数のSELECT結果を統合することができます。いわゆる「和集合」のことです。
和集合には、「UNION」もしくは「UNION ALL」を使用します。
例えば、テーブルAとテーブルBの結果をまとめて取得したいときに「UNION」,「UNION ALL」を使用します。
UNION,UNION ALLはいわゆる和集合です。ザックリいうと、「テーブルA+テーブルB」のようなイメージです。
UNION
- 複数のSELECT結果を統合する。重複レコードは1行にまとめられる
UNION ALL
- 複数のSELECT結果を統合する。重複レコードはそのまま検索される
サンプルデータ
--野球部のメンバーを取得する SELECT studentno,name FROM act_baseball;
studentno | name |
15 | 佐藤太郎 |
20 | 山田一郎 |
44 | 田中花子 |
--サッカー部のメンバーを取得する SELECT studentno,name FROM act_soccer;
studentno | name |
8 | 伊藤一 |
10 | 加藤和也 |
44 | 田中花子 |
例1. UNIONで2つのテーブルを検索するパターン
--野球部とサッカー部のメンバー全員を取得する SELECT studentno,name FROM act_baseball UNION SELECT studentno,name FROM act_soccer order by 1;
studentno | name |
8 | 伊藤一 |
10 | 加藤和也 |
15 | 佐藤太郎 |
20 | 山田一郎 |
44 | 田中花子 |
UNIONを使用することで別テーブル同士のSELECT結果をまとめて表示することができます。上の例では、野球部かサッカー部のどちらかに所属しているメンバーをすべて取得しました。
上の例ではテーブルは2つだけでしたが、2つ以上の複数のテーブルを統合できます。
注意点としては、テーブルの列は同じ数でないといけません。
例2. UNION ALLで2つのテーブルを検索するパターン
--野球部とサッカー部のメンバー全員を取得する SELECT studentno,name FROM act_baseball UNION ALL SELECT studentno,name FROM act_soccer order by 1;
studentno | name |
8 | 伊藤一 |
10 | 加藤和也 |
15 | 佐藤太郎 |
20 | 山田一郎 |
44 | 田中花子 |
44 | 田中花子 |
「UNION ALL」を使用する場合は重複レコードもふくめて表示することができます。上記の例では、野球部とサッカー部に所属しているメンバーをすべて取得しました。
しかし「UNION ALL」は重複をそのまま取得します。野球部とサッカー部の両方に所属している「44,田中花子」は2件取得されました。
このように、重複をそのまま取得したい場合はUNION ALL、排除したい場合はUNIONを使用します。
以上、Oracleで複数のSELECT結果を統合(和集合)するUNION,UNION ALLでした。
コメント