UNION 演算子を使用する

完了

UNION 演算子を使うと、複数のクエリ結果セットを単一の結果セットに結合できます。 これを行うには、次の 2 つの方法があります。

  • UNION - 結合された結果には重複したものは含まれません
  • UNION ALL - 結合された結果セットには重複したものが含まれます

ヒント

あるセット内の NULL は、別のセット内の NULL と等しいと見なされます。

UNION を使用して結果セットを結合する場合、次の 2 つの規則があります。

  • 列の数と順番は、すべてのクエリで同じであること
  • データ型に互換性があること

Note

UNION は JOIN とは異なります。 JOIN では、2 つのテーブルの列を比較して、2 つのテーブルの行を含む結果セットを作成します。 UNION は 2 つの結果セットを連結します。最初の結果セットのすべての行が 2 番目の結果セットの行に追加されます。

ここでは、2 つの顧客のリストと、返される結果セットの簡単な例を見てみましょう。 最初のクエリでは、1 から 9 の間の CustomerID を持つ顧客が返されます。

SELECT CustomerID, companyname, FirstName + ' ' + LastName AS 'Name'
FROM SalesLT.Customer
WHERE CustomerID BETWEEN 1 AND 9; 

A screenshot that shows results from the first SELECT statement.

2 番目のクエリでは、10 から 19 の間の CustomerID を持つ顧客が返されます。

SELECT customerid, companyname, FirstName + ' ' + LastName AS 'Name'
FROM saleslt.Customer
WHERE customerid BETWEEN 10 AND 19;

A screenshot that shows results from the second SELECT statement.

これらの 2 つのクエリを同じ結果セットに結合するには、UNION 演算子を使用します。

SELECT customerid, companyname, FirstName + ' ' + LastName AS 'Name'
FROM saleslt.Customer
WHERE customerid BETWEEN 1 AND 9
UNION
SELECT customerid, companyname, FirstName + ' ' + LastName AS 'Name'
FROM saleslt.Customer
WHERE customerid BETWEEN 10 AND 19; 

返される結果セットは次のとおりです。

A screenshot that shows results from the UNION statement.

すべての Transact-SQL ステートメントと同様、明示的に指定されない限り、並べ替え順序は保証されません。 並べ替えられた出力が必要な場合は、2 番目のクエリの末尾に ORDER BY 句を追加します。

UNION または UNION ALL の場合、両方のクエリによる列数が同じで、列が同じデータ型である必要があります。これにより、異なるクエリによる行を結合できるようになります。