(最終更新月: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のチュートリアルはこちら。
【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」
id | name |
---|---|
1 | カジサック |
2 | さんま |
3 | やまだたかゆき |
4 | 宮迫 |
5 | まつもとひとし |
✔テーブル名「YOUTUBER」
id | name |
---|---|
1 | カジサック |
2 | DJ社長 |
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などを活用し、いろいろと使ってみるとすぐにマスターできます。
ぜひ上手くご活用ください。