概要
SQLServerで、SELECT文の結果を結合する方法を紹介します。
イメージとしては、JOINではテーブルを横に結合するのに対して、UNIONでは縦にデータを結合します。また、UNION と UNION ALL の違いは、UNION が 重複を排除するのに対し、UNION ALLは重複を排除しません。
イメージ図
内容
サンプルをみながら説明します。
UNION の結合
‘い’ が2レコードあるので、1レコードに集約されています。
SELECT 'あ' AS '列1' UNION SELECT 'い' UNION SELECT 'い' UNION SELECT 'う'
列1 |
あ |
い |
う |
UNION ALL 全データの結合
‘い’ が2レコードありますが、両方取得できます。
SELECT 'あ' AS '列1' UNION ALL SELECT 'い' UNION ALL SELECT 'い' UNION ALL SELECT 'う'
列1 |
あ |
い |
い |
う |
注意点
いくつか注意点を上げておきます。
列名は、最初のテーブルの列名が採用されます。
SELECT 'あ' AS '列1' UNION ALL SELECT 'い' AS '列2' UNION ALL SELECT 'う' AS '列3'
列1 |
あ |
い |
う |
列数が違うとエラーになります。
SELECT 'あ','か' UNION ALL SELECT 'い' UNION ALL SELECT 'う'
メッセージ 205、レベル 16、状態 1、行 30 UNION 演算子、INTERSECT 演算子または EXCEPT 演算子を使用して組み合わされたすべてのクエリには、クエリの対象となるリスト内の式と同じ数の式を含める必要があります。
データ型が異なるとエラーになります。
SELECT 'あ' UNION ALL SELECT getdate() UNION ALL SELECT 'う'
メッセージ 241、レベル 16、状態 1、行 30 文字列から日付と時刻、またはそのいずれかへの変換中に、変換が失敗しました。
コメント