SQLのUNION演算子とは?複数のSELECT結果を1つに結合する方法
データベースへクエリを実行する際、2つ以上のSELECT文の結果を組み合わせて表示したいケースはよくあります。たとえば、「顧客が所在する都市の一覧」と「自社の支店がある都市の一覧」をまとめて取得したい場合などです。2回のクエリを別々に実行しても目的は達成できますが、1つのクエリで結果を得られればより効率的です。
そんなときに役立つのがSQL UNION演算子です。UNION句を使うことで、2つ以上のSELECTクエリの結果を、1つの結果セットとして結合できます。
この記事では、SQL UNION演算子の基本をわかりやすく解説し、データベース操作のどのような場面でこのコマンドが活用できるのかを見ていきます。
クエリのおさらい
プログラマーはクエリを使ってデータベースから情報を取得します。クエリはほとんどの場合、SQL SELECT文から始まり、特定の条件に基づいてデータを取り出すために使われます。また、対象となるテーブルを指定するFROM句をはじめ、取得するデータを絞り込むためのさまざまな演算子が含まれるのが一般的です。
SQLクエリの一般的な構文は次のとおりです。
SELECT column_name FROM table_name WHERE your_conditions_are_met;
従業員全員の名前のリストを返すSQLクエリの例がこちらです。
SELECT name FROM employees;
このクエリの出力は以下のようになります。
| name |
| Luke Mike Hannah Geoff Alexis Emma Jonah |
(7行)
複数のカラムから情報を取得したい場合は、カラム名をカンマで区切って指定します。すべてのカラムのデータを取得したい場合は、テーブル内の全カラムを表すアスタリスク(*)を使用します。
SQL UNION演算子の使い方
SQL UNION演算子を使うと、2つ以上のクエリの結果を組み合わせて、1つのテーブルとしてまとめて取得できます。
UNION演算子を使用するには、次の2つの条件を満たしている必要があります。
- データ型に互換性があること: 結合するカラムのデータ型は互換性が必要です。たとえば、あるテーブルでは給与が整数型(INTEGER)、別のテーブルでは浮動小数点型(FLOAT)になっている場合、UNIONは正しく機能しません。
- カラムの数と順序が一致していること: 各クエリで指定するカラムの数と並び順は、同じである必要があります。
SQL UNIONクエリの構文は以下のとおりです。
SELECT column_name FROM table1_name UNION SELECT column_name FROM table2_name;
それでは、具体例を使ってSQL UNION演算子の動作を確認してみましょう。ここでは、顧客全員にお知らせを送りたい企業を想定します。あわせて、社内の状況を共有するため、従業員にも同じお知らせを送りたいとしましょう。
顧客と従業員、双方のメールアドレス一覧を取得するには、次のようなSQLクエリを使用します。
SELECT name, email FROM employees UNION SELECT name, email FROM customers;
このクエリの出力は以下のとおりです。
| name | |
| Emma | emma.a@gmail.com |
| Jonah | jonah.h@gmail.com |
| Hannah | hannah.y@gmail.com |
| Luke | luke.e@gmail.com |
| John | john.p@outlook.com |
| Geoff | geoff.l@gmail.com |
| Alexis | alexis.e@gmail.com |
| Fred | fred.s@gmail.com |
| Erin | erin.a@gmail.com |
| Katy | katy.l@gmail.com |
| Anne | anne.s@gmail.com |
| Tom | tom.h@gmail.com |
| Mike | mike.h@gmail.com |
| Hannah | hannah.p@gmail.com |
(14行)
ご覧のとおり、UNIONクエリによって、顧客と従業員両方の氏名とメールアドレスの一覧を取得できました。
ここで注意したいのは、UNION演算子は最終的な結合結果から重複する行を自動的に削除するという点です。つまり、ある従業員が同時に顧客でもあった場合、その人の情報は一度だけ表示されます。
先ほどの例ではこれで問題ありませんでしたが、重複する行も含めて結果を取得したい場合は、クエリにALLキーワードを追加します。以下がその例です。
SELECT name, email FROM employees UNION ALL SELECT name, email FROM customers;
まとめ
この記事では、SQLサーバーでUNION演算子を使用する方法について解説しました。これまで見てきたように、UNIONを使うと、2つのテーブルからデータを取得し、その結果を1つのテーブルにまとめることができます。たとえば、仕入先と販売代理店の住所がそれぞれ別のテーブルに保存されている場合、その両方の一覧を取得したいときにUNIONクエリが活躍します。
重複行の扱い(UNIONとUNION ALLの違い)や、カラム数・データ型の条件といったポイントを押さえておけば、実務でも安心して活用できるでしょう。
-
Oracle Database 19cのSQL検疫(SQL Quarantine)機能とは?リソースマネージャによる暴走クエリ対策の完全ガイド
本記事では、Oracle Database 19cの新機能であるSQL検疫(SQL Quarantine)について詳しく解説します。Oracle® Resource Managerを使用すると、CPUやI/Oといったシステムリソースの使用量を制御・制限できます。さらに注目すべきは、定義された閾値を超える長時間実行クエリの実行自体を防止できる点です。 SQL検疫(SQL Quarantine)とは何か? 「検疫(Quarantine)」とは隔離を意味します。SQL検疫は、暴走クエリ(Runaway Query)がもたらすオーバーヘッドを排除するために使用できる、19cの新機能です。暴走クエリとは
-
Belombrea.comの削除方法|広告・リダイレクトを完全に除去する手順
Belombrea.comとは?その危険性と削除方法を徹底解説仕事で使うパソコンには、生産性を低下させるような有害なプロセスが常駐していては困ります。ゲーム用途のPCについても同様で、快適なパフォーマンスを維持するには、システムが常にベストな状態にある必要があります。しかし、Belombrea.comのようなPUP(潜在望ましくないプログラム)がPCに潜んでいると、最適なパフォーマンスを実現するのは困難になります。この種のプログラムはPCの動作を妨げ、インターネット接続速度の低下など、少なくともこれらの問題を引き起こします。本記事では、Belombrea.comを削除するための対処法をご紹介し