【SQL Server】UNIONとUNION ALL の使い方

SQL Server
この記事は約2分で読めます。

概要

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
文字列から日付と時刻、またはそのいずれかへの変換中に、変換が失敗しました。

 

 

コメント

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