SQLServer UNIONとUNION ALL

SQLServerで、SELECT文の結果を結合する方法を紹介します。

今回は、JOINなどのテーブルの結合ではなく、UNIONでの、データの結合についてみてみましょう。

今回使用するテーブル

SELECT  * FROM
 hironimoTable

結果
id   |nickName|animal
-----+--------+------
00001|ひろにも|きりん
00002|ひろにも|きりん
00003|ひろにも|きりん
00004|ひろにも|きりん
00005|ひろにも|きりん
00006|たなか  |いぬ
00007|たなか  |いぬ
00008|すずき  |ねこ
00009|すずき  |ねこ
00010|すずき  |ぞう
00011|すずき  |ぞう
00012|さとう  |ぞう
00013|さとう  |ぞう
00014|さとう  |きりん
00015|さとう  |きりん

UNION ALL 全データの結合

それではさっそく、結合の方法を見てみましょう。

UNIONよりUNION ALLの方がわかりやすいので先に、UNION ALLから例を見ていきます。

UNION ALL は単純に2つ以上のSELECT文の結果を合わせることができます。

--1つめのSQL
SELECT 
  id
 ,nickName
 ,animal
FROM
 hironimoTable
WHERE
  nickName = 'さとう'


結果
id   |nickName|animal
-----+--------+------
00012|さとう  |ぞう
00013|さとう  |ぞう
00014|さとう  |きりん
00015|さとう  |きりん
--2つ目のSQL
SELECT 
  id
 ,nickName
 ,animal
FROM
 hironimoTable
WHERE
  animal = 'きりん'

結果
id   |nickName|animal
-----+--------+------
00001|ひろにも|きりん
00002|ひろにも|きりん
00003|ひろにも|きりん
00004|ひろにも|きりん
00005|ひろにも|きりん
00014|さとう  |きりん
00015|さとう  |きりん

この2つのSQLを結合する。

SELECT 
  id
 ,nickName
 ,animal
FROM
 hironimoTable
WHERE
  nickName = 'さとう'

UNION ALL

SELECT 
  id
 ,nickName
 ,animal
FROM
 hironimoTable
WHERE
  animal = 'きりん'


結果
id   |nickName|animal
-----+--------+------
00012|さとう  |ぞう
00013|さとう  |ぞう
00014|さとう  |きりん
00015|さとう  |きりん
00001|ひろにも|きりん
00002|ひろにも|きりん
00003|ひろにも|きりん
00004|ひろにも|きりん
00005|ひろにも|きりん
00014|さとう  |きりん
00015|さとう  |きりん

UNION ALLを使うことで、データが結合されたのが確認できました。

UNION ALLは、SQLの結果をそのまま結合した結果を表示するので、同じデータ(ID:00014,00015)が重複して表示されています。

UNION データ結合

続いてはUNIONの例を確認していきます。

SELECT 
  id
 ,nickName
 ,animal
FROM
 hironimoTable
WHERE
  nickName = 'さとう'

UNION

SELECT 
  id
 ,nickName
 ,animal
FROM
 hironimoTable
WHERE
  animal = 'きりん'

結果
id   |nickName|animal
-----+--------+------
00001|ひろにも|きりん
00002|ひろにも|きりん
00003|ひろにも|きりん
00004|ひろにも|きりん
00005|ひろにも|きりん
00012|さとう  |ぞう
00013|さとう  |ぞう
00014|さとう  |きりん
00015|さとう  |きりん

結果を見ると、UNION ALLの時は、全てのデータがそのまま表示されていましたが、
UNIONの場合は、重複していたデータが表示されません
UNION ALLとUNIONの違いをしっかりと理解しておきましょう。

また、UNIONとUNION ALLはどちらも、1つ目のSQLと2つ目のSQLの項目数が同じ時しか使えません
1つ目のSQLの項目が2つ、2つ目のSQLの項目が4つなどの場合は、エラーになるので注意してください。

 

まとめ

今回は、UNIONとUNION ALLのデータの結合方法を紹介しました。

UNIONとUNION ALLの違いはぜひ理解しておきましょう。

UNIONとUNION ALLの違い
  • UNION ALLは、SQLの結果をそのまま結合した結果を表示する
  • UNIONは、重複していたデータが表示されない

 

SQLServerの記事一覧

 

おすすめの記事