SQL UNIONの使い方!UNION ALLとの違いも!

かんたん!SQL





SQL UNIONの使い方について詳しく知りたいときはないでしょうか。
そんな中で悩むことは、

・SQL UNIONの使い方がわからない
・SQL UNIONとUNION ALLとの違いがわからない

ですよね。

今回はそんなお悩みを解決する

・SQL UNIONの使い方
・SQL UNIONとUNION ALLとの違い

についてまとめます!

SQL UNIONとは

SQL UNIONは、SQL(Structured Query Language)において、
複数のSELECTクエリの結果を結合するための演算子です。

UNION演算子は、データベース内の複数のテーブルからデータを抽出し、結合して一つのセットデータとして取得する際に使用されます。

SQL UNIONとUNION ALLとの違いは

SQL UNIONとUNION ALLとの違いについて説明をします。

UNION ALL演算子も、複数のSELECTクエリの結果を結合します。

ただし、重複する行を削除することはありません。

そのため、UNION ALLを使用すると、重複する行も含まれたままの結果が返されます。

ですので、UNION演算子との違いは重複する行を削除しているか否かという点になり、
重複があればその分のレコード数に差異が生じます。

UNION演算子:重複する行を削除する
UNION ALL演算子:重複する行を削除しない

次にSQL UNIONとUNION ALLの使い方について具体的にみてみましょう。

SQL UNIONの使い方

SQL UNION演算子の使い方について説明をします。

SQL UNION演算子は前述のとおりデータベース内の異なるテーブルからデータを結合し、重複する行を削除したい場合に使用します。

例えば、顧客情報が別々のテーブルに格納されていて、それらをまとめて取得したいが、重複する行を排除したいといった場合に適しています。

SQL UNIONの構文

SQL UNIONの構文は以下の通りです。

SELECT column1, column2 FROM table1
UNION
SELECT column1, column2 FROM table2;

SQL UNIONのサンプルコード

サンプルとして、顧客情報を保持する2つのテーブル、”Customers_A”と”Customers_B”を仮定します。

Customers_A テーブル

ID Last_Name First_Name
1 takahashi takahiro
2 ito daisuke
3 suzuki daisuke

Customers_B テーブル

ID Last_Name First_Name
3 suzuki daisuke
4 ito natsumi
5 suzuki keiko

テーブル作成とデータ挿入をするサンプルコードは以下の通りです。

-- Customers_A テーブルの作成
CREATE TABLE Customers_A (
    ID INT PRIMARY KEY,
    Last_Name VARCHAR(50),  
    First_Name VARCHAR(50)
);

-- データの挿入
INSERT INTO Customers_A (ID, Last_Name, First_Name )
VALUES
    (1, 'takahashi', 'takahiro'),
    (2, 'ito', 'daisuke'),
    (3, 'suzuki', 'daisuke');
    
    
-- Customers_B テーブルの作成
CREATE TABLE Customers_B (
    ID INT PRIMARY KEY,
    Last_Name VARCHAR(50),  
    First_Name VARCHAR(50)
);

-- データの挿入
INSERT INTO Customers_B (ID, Last_Name, First_Name )
VALUES
    (3, 'suzuki', 'daisuke'),
    (4, 'ito', 'natsumi'),
    (5, 'suzuki', 'keiko');

以下のようにUNION演算子を使用して、2つのテーブルから取得した顧客情報を結合し、重複を除いた結果セットを取得します。

SELECT ID, Last_Name, First_Name FROM Customers_A
UNION
SELECT ID, Last_Name, First_Name FROM Customers_B;

結果です。

ID Last_Name First_Name
1 takahashi takahiro
2 ito daisuke
3 suzuki daisuke
4 ito natsumi
5 suzuki keiko

ID3の行が重複していたので削除された結果が返ります。

 

SQL UNION ALLの使い方

SQL UNION ALL演算子の使い方について説明をします。

SQL UNION ALL演算子は前述のとおりデータベース内の異なるテーブルからデータを結合し、重複を保持したままの結果を得たいときに使用します。

SQL UNION ALLの構文

SQL UNION ALLの構文は以下の通りです。

SELECT column1, column2 FROM table1
UNION ALL
SELECT column1, column2 FROM table2;

SQL UNION ALLのサンプルコード

サンプルは上記と同じく、顧客情報を保持する2つのテーブル、”Customers_A”と”Customers_B”を仮定します。

サンプルコードは以下の通りです。

SELECT ID, Last_Name, First_Name FROM Customers_A
  UNION ALL
SELECT ID, Last_Name, First_Name FROM Customers_B;

結果です。

ID Last_Name First_Name
1 takahashi takahiro
2 ito daisuke
3 suzuki daisuke
3 suzuki daisuke
4 ito natsumi
5 suzuki keiko

ID3の行が重複していても削除されず、重複した状態での結果が返ります。

UNIONにおいて重複が排除される条件

UNION演算子において重複が排除される条件について説明をします。

UNION演算子において重複が排除されるかどうかは、行全体の値が条件になるのではなく、
SELECT文で指定したカラムの値が重複するかどうかで判断されます。

つまり、SELECT文で指定したカラムの値が比較先の値と完全に一致する場合に重複が排除されます。

例えば以下のような1つのカラムだけSELECT文で選んだ場合は、

SELECT Last_Name FROM Customers_A
UNION
SELECT Last_Name FROM Customers_B;

以下の結果になります。

Last_Name
takahashi
ito
suzuki

Last_Nameが重複する場合は排除され、他の行が残りました。

タカヒロ
タカヒロ
UNION演算子は表の行データ間で重複していなくても、Select文で選択したカラム内の中で重複があれば削除対象となってしまうことに注意しましょう。

さいごに

今回は、

・SQL UNIONの使い方
・SQL UNIONとUNION ALLとの違い

についてまとめました。

また、他にも役に立つ情報がありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。