Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

SQLのunion allの構文についてまとめています。

SQLのunion allは、検索結果を統合する

SQLのunion allは、selectの検索結果を統合します。

以下の例は、emp_no=20005のレコードを抽出するselect文と、emp_noが20007~20010のレコードを抽出するselect文の検索結果をunion allで統合する例です。

mysql> select * from employees where emp_no = 20005 
union select * from employees where emp_no between 20007 and 20010;
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date  |
+--------+------------+------------+-----------+--------+------------+
|  20005 | 1956-02-20 | Licheng    | Przulj    | M      | 1992-07-17 |
|  20007 | 1964-06-21 | Deborah    | Setia     | F      | 1991-06-11 |
|  20008 | 1954-11-21 | Hilary     | Speel     | M      | 1989-04-12 |
|  20009 | 1961-10-30 | Yakkov     | Krybus    | F      | 1987-09-10 |
|  20010 | 1961-01-26 | Saniya     | Veccia    | M      | 1997-06-16 |
+--------+------------+------------+-----------+--------+------------+
5 rows in set (0.00 sec)

【関連記事】
MySQL UNIONで、select文ごとにorder byでソート指定するサンプルSQL

サブクエリとunion allを組み合わせることで、複数のselect文ごとに異なる条件でorder byによるソートをおこなうことも可能です。

以下は、1つ目のselect文ではbirth_date(誕生日)でソートを行い、2つ目のSQLではfirst_name(姓名の名)でソートをおこなった結果をunion allで統合しています。

mysql> (select * from employees where emp_no <= 10010 order by birth_date limit 10) 
UNION ALL
 ( select * from employees where emp_no between 10011 and 10020 order by first_name limit 10);

主要DBMSのunion allの構文

Oracleのunion allの構文

SELECT location_id  FROM locations 
UNION ALL 
SELECT location_id  FROM departments
ORDER BY location_id;

参考)UNION [ALL]、INTERSECTおよびMINUS演算子

unionは集合演算子と呼ばれ、複数の問い合わせを組み合わせる事ができます。unionとだけ指定すると重複が除外されますが、union allと指定すると重複も含まれます。

Oracleでは、データ型がBLOB、CLOB、BFILE、VARRAYまたはネストした表である列、LONG列に対しては無効になります。select構文のリストに敷が含まれている場合は、式に列の別名を指定する必要があります。

SQL Serverのunion allの構文

{ <query_specification> | ( <query_expression> ) }   
{ UNION [ ALL ]   
  { <query_specification> | ( <query_expression> ) } 
  [ ...n ] }

参考)UNION (Transact-SQL) – SQL Server | Microsoft Docs

UNION ALLと指定すると、重複を含めたデータを取得します。例えば以下のSQLでは、DimCustomerテーブルからCustomerKey, FirstName, LastNameを抽出した結果を3セット分抽出します。

SELECT CustomerKey, FirstName, LastName  
FROM DimCustomer  
UNION ALL   
SELECT CustomerKey, FirstName, LastName  
FROM DimCustomer  
UNION ALL   
SELECT CustomerKey, FirstName, LastName  
FROM DimCustomer;  

MySQLのunion allの構文

SELECT ...
UNION [ALL | DISTINCT] SELECT ...
[UNION [ALL | DISTINCT] SELECT ...]

参考)MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.2.9.4 UNION 構文

以下は、2つのselect文の結果をunion allで連結した例です。

mysql> SELECT REPEAT('a',1) UNION ALL SELECT REPEAT('b',10);
+---------------+
| REPEAT('a',1) |
+---------------+
| a             |
| bbbbbbbbbb    |
+---------------+

MySQLのunionでは、デフォルトではdistinctを指定したことになり、重複データがあった場合は除去されます。union allを明示的に指定すると、重複データも含めて検索結果が連結されます。

mysql> select 1 as test union select 1 union select 1 union select 1;
+------+
| test |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

mysql> select 1 as test union all select 1 union all select 1 union all select 1;
+------+
| test |
+------+
|    1 |
|    1 |
|    1 |
|    1 |
+------+
4 rows in set (0.00 sec)

PostgreSQLのunion allの構文

query1 UNION [ALL] query2

参考)PostgreSQLの公式ドキュメント:問い合わせの結合

PostgreSQLでも他のDBMSと同様に、union all指定をすると重複を含めて複数のselect文の検索結果を連結します。allを指定せずunionのみだと、重複行は除去されます。

SQLのunion allのまとめ

ポテパンダの一言メモ
  • union allは複数のselect文の検索結果を統合する
  • unionのallを指定すると、重複データを含めて検索結果を統合する
  • サブクエリを組み合わせることで、select文ごとに異なるソート条件を指定することが可能

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。