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を使うほうがよい。
統合するときの条件
- SELECTで取得する項目数、順番は揃える。
- 統合する項目同士の型は、合わせる。
ただし、データ型については、変換できるものであれば完全に一致していなくても、暗黙に変換が可能なものであれば勝手に変換されます。
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 名前
統合後のカラム名について
カラム名は一つ目のクエリーで指定したものが採用されます。
今日はここまで。