本記事では、Oracleで、
複数のSELECT結果を統合することができるUNIONとUNION ALLの使い方を紹介する。
UNION、UNION ALL –複数のSELECT結果を統合する–
Oracleでは「UNION」もしくは「UNION ALL」を使用することで、
複数のSELECT結果を統合(和集合)することが可能だ。

UNION、UNION ALLの使い方
UNION、UNION ALLの書式は以下のようになる
--UNION
テーブルA
UNION
テーブルB
--UNION ALL
テーブルA
UNION ALL
テーブルB
UNION,UNION ALLはいわゆる和集合だ。
ザックリいうと、「テーブルA+テーブルB」のようなイメージになる。
注意点としては、
UNIONで結合する際はテーブルの列は同じ数でないといけないと言う決まりがある。
上記の理由から、実際は既存のテーブル同士を結合するよりも、SELECT文でカラムを一致させた結果同士を結合すると言う使い方が主となるだろう。
UNIONとUNION ALLの違い
UNIONとUNION ALLの違いは以下となる
UNION :統合の結果、重複レコードは1行にまとめられる。
UNION ALL:統合の結果、重複レコードは重複したまま表示される。
UNION, UNION ALLでテーブルを統合するサンプル
ではここからは実際に、
UNION、UNION ALLを使ってテーブル同士を統合するサンプルを紹介していく。
サンプルに使うデータは以下の様なものとする。
--テーブルA
SELECT id,name FROM table_a;
id | name |
11 | たろう |
22 | しんのすけ |
44 | りこ |
--テーブルB
SELECT id,name FROM table_b;
id | name |
5 | けんいち |
8 | マイケル |
44 | りこ |
① UNIONで2つのテーブルを統合する
以下はUNIONを使ってテーブルAとテーブルBを統合させた結果だ。
SELECT id,name FROM table_a
UNION
SELECT id,name FROM table_b
order by id;
実行結果
id | name |
5 | けんいち |
8 | マイケル |
11 | たろう |
22 | しんのすけ |
44 | りこ |
UNIONを使用することで、別テーブル同士のSELECT結果をまとめて表示することが可能だ。
その際、重複レコードである「44、りこ」のレコードは1行にまとめられて表示されているのが分かるだろう。
上の例ではテーブルは2つだけだったが、2つ以上の複数のテーブルを統合することも可能だ。
② UNION ALLで2つのテーブルを統合する
以下はUNION ALLを使ってテーブルAとテーブルBを統合させた結果だ。
SELECT id,name FROM table_a
UNION ALL
SELECT id,name FROM table_b
order by id;
実行結果
id | name |
5 | けんいち |
8 | マイケル |
11 | たろう |
22 | しんのすけ |
44 | りこ |
44 | りこ |
UNION ALLを使用することで、重複レコードを重複したまま統合して表示することが可能だ。
重複レコードである「44、りこ」のレコードが2行そのまま表示されているのが分かるだろう。
まとめると、
- 重複をそのまま取得したい場合はUNION ALL、
- 重複を排除したい場合はUNION
を使用すると良いだろう。
関連記事
https://www.shift-the-oracle.com/sql/union-operator.html
https://docs.oracle.com/cd/E17952_01/mysql-8.0-ja/union.html
UNIONと似た機能を持つINTERSECTはよく混同してしまうが、
こちらはテーブルの共通部分だけを取得する関数となっている。
記事を取得できませんでした。記事IDをご確認ください。