【Oracle】UNION・UNION ALL で複数のSELECT結果を統合【SQL】

【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でした。

コメント