SQL ServerのUNION・UNION ALL 統合する

複数のSELECT結果を統合するUNION、UNION ALL(和集合)

SQL Serverでは複数のSELECT結果を統合(和集合)することができます。UNIONもしくはUNION ALLを使用します。例えば、テーブル1とテーブル2の結果をまとめて検索したいときにUNION,UNION ALLを使用します。

UNION,UNION ALLはいわゆる和集合です。イメージ的には「テーブル1+テーブル2」のようなイメージです。

UNION

  • 複数のSELECT結果を統合する。重複レコードは1行にまとめられる

UNION ALL

  • 複数のSELECT結果を統合する。重複レコードはそのまま検索される

 

例1. UNIONで2つのテーブルを検索するパターン

--野球部のメンバーを取得する
SELECT studentno,name FROM act_baseball;
[結果]
15,佐藤太郎
20,山田一郎
44,田中花子

--サッカー部のメンバーを取得する
SELECT studentno,name FROM act_soccer;
[結果]
8,伊藤一
10,加藤和也
44,田中花子

--野球部とサッカー部のメンバー全員を取得する
SELECT studentno,name FROM act_baseball
UNION
SELECT studentno,name FROM act_soccer
order by 1;
[結果]
8,伊藤一
10,加藤和也
15,佐藤太郎
20,山田一郎
44,田中花子

UNIONを使用することで別テーブル同士のSELECT結果をまとめて表示することができます。上の例では、野球部とサッカー部に所属しているメンバーをすべて取得しました。

テーブルは2つだけでなく、複数のテーブルを統合できます。注意点としては、テーブルの列は同じ数でないといけません。

例2. UNION ALLで2つのテーブルを検索するパターン

--野球部とサッカー部のメンバー全員を取得する
SELECT studentno,name FROM act_baseball
UNION ALL
SELECT studentno,name FROM act_soccer
order by 1;
[結果]
8,伊藤一
10,加藤和也
15,佐藤太郎
20,山田一郎
44,田中花子
44,田中花子

UNION ALLを使用すると、重複レコードもふくめて表示することができます。上の例では、野球部とサッカー部に所属しているメンバーをすべて取得しましたが、野球部とサッカー部の両方に所属している「44,田中花子」が2件取得されました。

このように、重複をそのまま取得したい場合はUNION ALL、排除したい場合はUNIONを使用します。

以上、SQL Serverで複数のSELECT結果を統合(和集合)するUNION,UNION ALLでした。

コメント