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;
2 番目のクエリでは、10 から 19 の間の CustomerID を持つ顧客が返されます。
SELECT customerid, companyname, FirstName + ' ' + LastName AS 'Name'
FROM saleslt.Customer
WHERE customerid BETWEEN 10 AND 19;
これらの 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;
返される結果セットは次のとおりです。
すべての Transact-SQL ステートメントと同様、明示的に指定されない限り、並べ替え順序は保証されません。 並べ替えられた出力が必要な場合は、2 番目のクエリの末尾に ORDER BY 句を追加します。
UNION または UNION ALL の場合、両方のクエリによる列数が同じで、列が同じデータ型である必要があります。これにより、異なるクエリによる行を結合できるようになります。