【SQL初級編6】UNIONを使ってSQL文同士を結合させよう

SQL入門

本記事では、UNIONについて解説します。

前回はサブクエリについて解説しました。

今回では、UNIONで複数のSQL文を繋げる方法についてみていきましょう。

SQLのUNIONとは?

UNIONとは、2つのSQL文をつなぐことができるもののことです。

UNIONを使うことで、複数のSQL文の処理結果を合わせて表示することができるようになります。

また、UNIONの他にUNION ALLというものもあります。

UNIONは処理結果から重複したものを除外するのに対し、UNION ALLは重複したものはそのまま表示します。

SQLのUNIONの使い方

UNIONの具体的な使い方についてみていきましょう。

次の項目に従って解説していきます。

  • UNIONで検索結果を統合する
  • UNION ALLで検索結果を統合する

なお、今回は『SQL入門編1』で作成したテーブルを使って解説します。『SQL入門編1』で演習用のテーブルを作っていない方は、【SQL入門編1】初心者必見!SQLのクエリの書き方を学ぼうを読んで予め作成してくださいね。

UNIONで検索結果を統合する

UNIONで検索結果を統合するやり方を解説します。

まずUNIONで統合する前のSQL文をみていきます。

○コード例

SELECT name FROM TEST.Student WHERE name = "佐藤";

○実行結果

○コード例

SELECT name FROM TEST.Student WHERE name = "鈴木";

○実行結果

こちら2つのSQL文はnameが「佐藤」のもの、「鈴木」のもののレコードをそれぞれ取得しています。

こちら2つのSQL文を、UNIONで統合してみます。

○コード例

SELECT name FROM TEST.Student WHERE name = "佐藤"
UNION
SELECT name FROM TEST.Student WHERE name = "鈴木";

○実行結果

2つのSQLの実行結果が合わさって表示されました。

このようにUNIONは2つの表を統合して表示してくれるものです。

UNION ALLで検索結果を統合する

UNIONの他に、UNION ALLというものもあります

UNIONと同様2つの表を統合するものですが、UNION ALLの場合重複箇所もそのまま表示します。

○コード例

SELECT name FROM TEST.Student WHERE age = 9
UNION ALL
SELECT name FROM TEST.Student WHERE name = "鈴木";

○実行結果

上記のコードは「age=9」のレコードと「name=”鈴木”」のレコードをそれぞれ取得し、UNION ALLにて表示しています。

ただ実行結果をみて分かる通り、重複してそのまま表示していますね

このようにUNION ALLは重複する箇所もそのまま表示するのが特徴です。

UNIONとUNION ALLは状況に応じて使い分けるようにしましょう。

INTERSECTで和集合を取得する(MySQL不可)

UNIONとUNION ALL以外にも、SQL文同士を結合させられるものはあります。

INTERSECTを使うことで、それぞれの実行結果の和集合を取得することが可能です。

和集合とは、2つの重複している箇所、のことを言います。

INTERSECTの具体的な使い方をみていきましょう。

○コード例(SQliteによる実行)

SELECT name FROM Student WHERE gender = "女"
INTERSECT
SELECT name FROM Student WHERE id = 3;

○実行結果

上記のコードは「gender=”女”」に該当するものと「id=3」に該当するものの、和集合を取得しています。

このようにINTERSECTを使うことで、2つのSQL文の実行結果の中で、重複するものだけ取り出せます

ただし、INTERSECTは残念ながらMySQLではサポート対象外となっており、使うことができません

EXCEPTで差集合を取得する(MySQL不可)

つづいて、EXCEPTをみていきます。

EXCEPTを使うことで、それぞれの実行結果の差集合を取得することが可能です。

差集合とは、Aに含まれるがBに含まれない箇所、のことを言います。

EXCEPTの具体的な使い方をみていきましょう。

○コード例(SQliteによる実行)

SELECT name FROM Student WHERE gender = "女"
EXCEPT
SELECT name FROM Student WHERE id = 3;

○実行結果

上記のコードは「gender=”女”」に該当するものと「id=3」に該当するものの、差集合を取得しています。

「gender=”女”」に該当するものをA、「id=3」に該当するものをBとして考え、Aに該当するが、Bに該当しないものだけ表示しています。

このように、EXCEPTを使うことで、差集合を取得することが可能です。

EXCEPTもINTERSECT同様、MySQLなど一部のRDBMSでは使用できないので、注意しましょう。

まとめ

本記事では、UNIONついて解説しました。

UNIONによって複数のSQL文を繋げられることが、お分かり頂けたかと思います。

UNION以外にも、INTERSECTやEXCEPTなどを使うことで、和集合や差集合が取得可能です。

ただし、INTERSECTやEXCEPTはMySQLではサポートされていないので注意しましょう。

次回は、INNER JOINを解説していきます。

挫折率が高い??プログラミング学習のポイント
駆け出しエンジニアが一緒に学ぶ
CANITは、Progateやドットインストールで独学している人達同士をつなげます。駆け出しエンジニアのあなたのためのSNSです。
SQL入門
【この記事を書いた人】
谷津弘樹

某自社開発のIT企業に勤めていた元webプログラマーです。主にサーバーサイド側を担当し、phpを使った開発経験があります。現在は退職しフリーランスライターとして活動中。IT系の記事を主に執筆し生計を立てています。

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