SQL UNIONについて

SQLでテーブル結合処理を行えるものの一つとして、UNIONがある。UNIONは、テーブルを縦方向に結合する。他の結合処理が可能なものとして、OUTER JOINとINNER JOINがあるが、これらは横方向にテーブルを結合する。

以下では、UNIONについての説明を行う。さらに、UNIONと似たUNION ALLもあるので、それについての説明も行う。

UNION

概要

UNIONでは、SQLで表示する2つのテーブルを縦に結合ができる。例として、以下2つのテーブルを用意する。

test_table
test3_table

この2つのテーブルをUNIONで結合した結果が以下の通り。

シンプル。

SQLの書き方

上の例で紹介したようにテーブルをUNIONで結合したい場合、以下のようにSQLを記述する。

select * from test_table
union 
select * from test3_table;

SQLの構造もシンプルで、SELECTで表示する2つのテーブルをUNIONでくっつけるという考え方になっている。

制約

UNIONでの結合の条件として、カラム数が揃っているということがある。言い換えれば、カラム数が揃っていればカラムの名前は合わせる必要はない(異なるカラム名のテーブルを結合する意味があるかどうかはわからない)。

また、UNIONは、暗黙的にDISTINCTが有効となっている。どういうことかというと、2つのテーブル間で内容が同じレコードがあると、そのレコードは複数ではなく1つ分として表示される。

例として、以下2つのテーブルを用意する。

(id1,name,id2)=(3,鈴木,3)が重複するレコードとなる。上2つのテーブルをUNIONで結合すると、以下の通りになる。

(id1,name,id2)=(3,鈴木,3)が2つ分ではなく、1つ分のみ表示されている。

UNION ALL

概要

レコードの重複を省略せずにテーブルを縦方向に結合したい場合は、UNION ALLを使う。

例として、上でも示した以下2つのテーブルを用意する。

test_table
test4_table

(id1,name,id2)=(3,鈴木,3)が重複するレコードとなっている。この2つのテーブルをUNION ALLで結合した結果は以下の通り。

(id1,name,id2)=(3,鈴木,3)が2レコード分表示されている。

SQLの書き方

上の例で紹介したようにテーブルをUNION ALLで結合したい場合、以下のようにSQLを記述する。

select * from test_table
union all
select * from test4_table;

UNIONのときと構造は同じ。UNIONがUNION ALLに変わるだけ。

この記事が気に入ったらサポートをしてみませんか?