【SQL】UNIONとUNION ALLの書き方を実例付きで解説

※本サイトにはプロモーション・広告が含まれています。

(最終更新月:2022年12月)

✔このような方へ向けて書かれた記事となります

「SQL言語でUNIONの使い方が知りたい」

「UNIONとUNION ALLって何が違うのだろうか?」

「UNIONとUNION ALLの実例が見たい」

✔当記事を通じてお伝えすること

  • UNIONの基本
  • UNION ALLの基本
  • UNIONとUNION ALLの実例

当記事では、UNIONとUNION ALLの基本事項や違いだけでなく、実際のコード例までご紹介しています

ぜひ最後までご覧ください。

✔当記事の信頼性

当記事では、Python言語をベースとしたDjangoフレームワークで、アプリの公開方法をご紹介しています。

データの保存場所は、サーバー内で動くpostgreSQL(ポスグレ)です。

Djangoを使えばSQLをマスターしておく必要はないものの、最低限の知識として、かなり勉強しました。

実際のコードや写真付きで、できる限り丁寧に解説します。

※Djangoのチュートリアルはこちら。

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

【SQL】UNIONの基本事項

まずはUNIONについて、基本的なことを見ていきましょう。

UNION ALLと比較するうえでも、しっかりと理解しておく必要があります。

  • UNIONとは
  • UNIONの基本構成

UNIONとは

UNIONとは、2つのテーブルの値を合算する和集合を求めるためのもの。

ただし、各テーブルで同じ値がある場合は、ひとつとしてカウントされます。

各テーブルに含まれている要素を確認したいときに適しているといえるでしょう。

UNIONの基本構成

UNIONの構成は以下のとおり。

SELECT カラム名 FROM テーブル1 UNION SELECT カラム名 FROM テーブル2

SELECT文をUNIONにより、繋ぐことで2つのテーブルから値を抽出できるようになるのです。

【SQL】UNION ALLの基本事項

UNION ALLの基本事項をご覧いただきます。

ここをしっかりと理解しなければ、UNIONと使い分けられません。

  • UNION ALLとは
  • UNION ALLの基本構成

UNION ALLとは

UNION ALLとは、UNIONと同様和集合を求めるためのもの。

ただし、重複している値それぞれを固有の値として表示します。

全体の数を把握したいときに使える手法です。

UNION ALLの基本構成

UNION ALLの構成は以下のとおりです。

SELECT カラム名 FROM テーブル1 UNION ALL SELECT カラム名 FROM テーブル2

2つのSELECT文をUNION ALLで繋ぐだけ。

【実例付】UNIONとUNION ALLの違い

UNIONとUNION ALLの違いを具体的に見ていきましょう。

実際のコード例を見ることで、イメージが湧きやすくなります。

  • UNIONの実例
  • UNION ALLの実例
  • UNIONとUNION ALLの違い

以下の2つのテーブルでおこなっていきます。

✔テーブル名「TV_TALENT」

idname
1カジサック
2さんま
3やまだたかゆき
4宮迫
5まつもとひとし

✔テーブル名「YOUTUBER」

idname
1カジサック
2DJ社長
3ヒカル
4宮迫
5ヒカキン

UNIONの実例

UNIONの実例をご紹介します。

SELECT name FROM TV_TALENT UNION SELECT name FROM YOUTUBER;
name
まつもとひとし
ヒカキン
カジサック
やまだたかゆき
DJ社長
ヒカル
宮迫
さんま

重複しているレコードはひとつとして、表示されます。

UNION ALLの実例

UNION ALLは以下のとおりとなります。

SELECT name FROM TV_TALENT UNION ALL SELECT name FROM YOUTUBER;
name
カジサック
さんま
やまだたかゆき
宮迫
まつもとひとし
カジサック
DJ社長
ヒカル
宮迫
ヒカキン

重複している値もそのまま表示されているのがわかります。

UNIONとUNION ALLの違い

UNIONとUNION ALLの違いは、重複している値の扱い方です。

  • UNION:重複している値はひとつとみなす
  • UNION ALL:重複している値でもそれぞれ固有のものとみなす

違いを理解したうえで、目的に合ったものを使いましょう。

UNIONとUNION ALLの書き方で注意すべき点

UNIONとUNION ALLの書き方で注意すべき点を見ていきましょう。

なぜなら、間違えて記述すると正しく表示されないから。

  • カラム数に気を付ける
  • データ型に注意する
  • ORDER BYの位置と数に気を付ける

カラム数に気を付ける

カラム数に気をつけて記述しなければなりません。

UNIONやUNION ALLで繋ぐ際に、それぞれの取り出すカラム数が同じでなければならないのです。

SELECT id, name FROM TV_TALENT UNION SELECT name FROM YOUTUBER;
ERROR: each UNION query must have the same number of columns Position: 45

データ型に注意する

データ型に気をつけなければならないことも、知っておいてください。

データ型が違うとエラーとなってしまいます。

SELECT id FROM TV_TALENT UNION SELECT name FROM YOUTUBER;
ERROR: UNION types integer and character varying cannot be matched Position: 39

ORDER BYの位置と数に気を付ける

ORDER BYの位置と数にも気をつけましょう。

ORDER BYは最後にひとつだけつけなければエラーとなってしまいます。

ORDER BYを最初のSELECTにひとつだけつけた場合

SELECT name FROM TV_TALENT ORDER BY name UNION SELECT name FROM YOUTUBER;
ERROR: syntax error at or near "UNION" Position: 42

ORDER BYを2つのSELECTそれぞれに記述した場合

SELECT name FROM TV_TALENT ORDER BY name UNION SELECT name FROM YOUTUBER ORDER BY name;
ERROR: syntax error at or near "UNION" Position: 42

最後にひとつだけつけるようにしてください。

【SQL Fiddle】SQLを無料で使えるツールのご紹介

当記事で共有している写真も、SQL Fiddleを使ってご説明しました。

特徴は以下のとおり。

  • SQL言語がブラウザ打てて、実行できる
  • 完全無料
  • 登録不要

以下のように、左側でテーブルやカラムの設定をおこない、右側でコードが実行できるのです。

SQL言語を学ぶなら、登録してくことをおすすめします!

ちなみに今回のデータベース設定として、SQL Fiddleの左側に書いたコードはこちら。

CREATE TABLE TV_TALENT(
  id SERIAL primary key,
  name varchar(50)
);

CREATE TABLE YOUTUBER(
  id SERIAL primary key,
  name varchar(50)
);

INSERT INTO TV_TALENT (name) VALUES ('カジサック');
INSERT INTO TV_TALENT (name) VALUES ('さんま');
INSERT INTO TV_TALENT (name) VALUES ('やまだたかゆき');
INSERT INTO TV_TALENT (name) VALUES ('宮迫');
INSERT INTO TV_TALENT (name) VALUES ('まつもとひとし');

INSERT INTO YOUTUBER (name) VALUES ('カジサック');
INSERT INTO YOUTUBER (name) VALUES ('DJ社長');
INSERT INTO YOUTUBER (name) VALUES ('ヒカル');
INSERT INTO YOUTUBER(name) VALUES ('宮迫');
INSERT INTO YOUTUBER(name) VALUES ('ヒカキン');

コピーして活用してください。

まとめ:SQLのUNIONとUNION ALLはどちらも和集合を表す

当記事の内容をまとめます。

  • UNIONは、重複した値をまとめる和集合
  • UNION ALLは、重複した値をまとめない和集合

データベースを扱う中で、和集合はとても使い勝手の良いコマンドです。

当記事で紹介したSQL Fiddleなどを活用し、いろいろと使ってみるとすぐにマスターできます。

ぜひ上手くご活用ください。

タイトルとURLをコピーしました