検索

キーワード


【SQL】UNIONについて

  • 公開日:2020-10-25 22:21:05
  • 最終更新日:2020-12-26 23:04:32
【SQL】UNIONについて

こんにちは。駆け出しエンジニアの竹前です。

ここでは、SQLのUNION演算子について説明します。

SQLについて勉強している方の参考になれば幸いです。


UNIONとは

UNION演算子は、複数のテーブルのデータを合わせて表示する場合に使います。

複数のテーブルのデータを表示する場合、通常のSELECT文では、表示するテーブルの分だけ実行する必要があり、実行結果はテーブルごとに表示されます。

UNIONでSELECT文をつなげることで、複数のテーブルのデータを一括にまとめて表示することができます。

SELECT 列名 FROM テーブル1 UNION SELECT 列名 FROM テーブル2;


テーブル1とテーブル2のSELECT文をUNIONで繋いでいます。

このとき、テーブル1とテーブル2の表示する列名とデータ型は同じである必要があります。


SELECT文については、以下の記事をご覧ください。

【SQL】SELECT文について


UNIONの使い方

まず、以下のようなtb1テーブルとtb2テーブルがあるとします。なお、画像はMySQLのものです。

tb1テーブルとtb2テーブル


以下のサンプルコードで、tb1テーブルとtb2テーブルのデータを合わせて表示します。

SELECT * FROM tb1 UNION SELECT * FROM tb2;


UNION演算子で、tb1テーブルとtb2テーブルのデータを合わせて表示

tb1テーブルとtb2テーブルのデータが合わせて表示されました。

tb1テーブルとtb2テーブルの両方に存在するcol1の値が3の行は、データがすべて等しいため、1行にまとめられています。


また、SELECT文に条件を指定することもできます。

SELECT * FROM tb1 WHERE col3 >= 70
UNION
SELECT * FROM tb2 WHERE col3 >= 60;


UNION 結果

SELECT文にWHERE句で条件を指定することにより、tb1テーブルのcol3の値が70以上、tb2テーブルのcol3の値が60以上の行が表示されました。


UNION ALLとは

UNIONでは、複数のテーブルでデータが重複した行は、1行にまとめられました。

データが重複した行も表示したい場合は、UNION ALLを使います。

SELECT 列名 FROM テーブル1 UNION ALL SELECT 列名 FROM テーブル2;


テーブル1とテーブル2のSELECT文をUNION ALLで繋いでいます。


UNION ALLの使い方

UNIONのサンプルコードと同様に、tb1テーブルとtb2テーブルを使用します。

tb1テーブルとtb2テーブル


以下のサンプルコードで、tb1テーブルとtb2テーブルのデータを合わせて表示します。

SELECT * FROM tb1 UNION ALL SELECT * FROM tb2;


UNION ALLを使ってtb1テーブルとtb2テーブルのデータを合わせて表示

tb1テーブルとtb2テーブルのデータが合わせて表示されました。

tb1テーブルとtb2テーブルの両方に存在するcol1の値が3の行は、2行表示されています。


また、UNIONと同様に、SELECT文に条件を指定することもできます。

SELECT * FROM tb1 WHERE col3 >= 70
UNION ALL
SELECT * FROM tb2 WHERE col3 >= 60;


SELECT文で条件を指定してデータを取得

SELECT文にWHERE句で条件を指定することにより、tb1テーブルのcol3の値が70以上、tb2テーブルのcol3の値が60以上の行が表示されました。



【著者】

たけまえ

駆け出しエンジニアの竹前です。 私自身が勉強したことをもとに、難しい内容はできるだけ簡単になるように読みやすく、分かりやすい記事を心がけています。