【SQL】UNIONとUNIONALL 結合時の注意点などまとめ
UNIONとは

二つ以上のSELECTの結果を、重複を削除して、統合して表示する。

以下のようなAテーブル、Bテーブルが存在した場合

クラスA:  

名前
山田さん
鈴木さん
田中さん

クラスB:

名前
鈴木さん
張さん
金木さん
SELECT *
  FROM Aテーブル
 UNION
SELECT *
  FROM Bテーブル

結合結果:

名前
山田さん
鈴木さん
田中さん
張さん
金木さん

のようなテーブルができます。鈴木さんが1件になっています。

UNION ALLとは

二つ以上のSELECTの結果を、重複も含めて、統合して表示する。

SELECT *
  FROM Aテーブル
 UNION ALL
SELECT *
  FROM Bテーブル

統合結果:

名前
山田さん
鈴木さん
田中さん
鈴木さん
張さん
金木さん

のようなテーブルができます。鈴木さんが重複しています。

UNION ALLのほうが実行速度が速い

UNIONは、重複を削除するので、どちらでも実行結果が変わらない場合は、UNION ALLを使うほうがよい。

統合するときの条件
  1. SELECTで取得する項目数、順番は揃える。
  2. 統合する項目同士の型は、合わせる。

    ただし、データ型については、変換できるものであれば完全に一致していなくても、暗黙に変換が可能なものであれば勝手に変換されます。

WHERE、GROUP BY、HAVING句を使用する

統合前の一つ一つのテーブルに対して指定が可能。

SELECT 名前
  FROM Aテーブル GROUP BY 名前 WHERE 名前 = "山田さん"
 UNION
SELECT 名前
  FROM Bテーブル GROUP BY 名前 WHERE 名前 = "鈴木さん"


ORDER BY句を使用する

統合した結果に対して、指定する。

SELECT * 
 FROM(SELECT 名前
      FROM Aテーブル GROUP BY 名前 WHERE 名前 = "山田さん"
      UNION
       SELECT 名前
         FROM Bテーブル GROUP BY 名前 WHERE 名前 = "鈴木さん"
      )TABLEA
ORDER BY 名前


統合後のカラム名について

カラム名は一つ目のクエリーで指定したものが採用されます。

今日はここまで。