SQL Serverで(SET OPERATORS)UNION、INTERSECT、およびEXCEPTを使用してデータを結合する
- 12-09-2022
- Toanngo92
- 0 Comments
SQL Serverが提供する集合演算子:
- 連合
- INTERSEC
- を除外する
Mục lục
ユニオンオペレーター(マージ)
UNION演算子を使用して、2つの異なるクエリステートメントの結果を1つの結果セットに結合できます。クエリステートメントには、互換性のある列タイプと同数の列が必要です。列名はステートメントごとに異なる場合がありますが、データ型には互換性がある必要があります。互換性のあるデータ型とは、1つの列のコンテンツを別の列に変換できることを意味します。たとえば、あるクエリステートメントのデータ型がintで、別のクエリステートメントのデータ型がmoneyの場合、それらは相互に互換性があり、intデータはmoney .dataに変換できるため、それらの間で結合を行うことができます。
構文:
Query_Statement1 UNION [ALL] Query Statment_2
例えば:
SELECT Product.ProductId FROM Production.Product UNION SELECT ProductId FROM Sales.SalesOrderDetail
上記のステートメントは、一致する両方のテーブルのProductId列データ全体を取得します。 ALL句を使用すると、重複レコードを含むすべてのテーブルが結果セットに表示されます(詳細には、同じ製品を販売する多くの注文があります)。
UNION ALLの例:
SELECT Product.ProductId FROM Production.Product UNION ALL SELECT ProductId FROM Sales.SalesOrderDetail
デフォルトでは、UNIONオペレーターは結果セット内の冗長レコードを削除します。ただし、ALL句をUNION演算子に追加すると、すべてのレコードが返されます。
UNIONとJOINの違い:
JOINおよびUNION操作を使用して、1つ以上のテーブルのデータを組み合わせることができます。違いは、データの結合方法にあります。
つまり、joinはデータを新しい列に結合します。 2つのテーブルが結合されている場合、最初のテーブルのデータは、同じ行の2番目のテーブルの列と一緒に一連の列に表示されます。
ユニオンはデータを新しい行に結合します。 2つのテーブルが「マージ」されている場合、最初のテーブルのデータは1つの行セットにあり、2番目のテーブルのデータは別のセットにあります。行の結果は同じです。
INTERSECT演算子(共通部分)
シチュエーションにProductとSalesOrderDetailの2つのテーブルがあり、両方のテーブルのすべての共通行を表示するとします。これを行うには、 INTERSECT演算子を使用できます。 INTERSECT演算子は、両方のクエリに共通の行を持つ個別の結果セットを返す2つのクエリステートメントで使用されます。
構文:
Query_statement1 INTERSECT Query_statement2
例えば:
SELECT Product.ProductId FROM Production.Product INTERSECT SELECT ProductId FROM Sales.SalesOrderDetail
Production.ProductテーブルとSales.SalesOrderDetailテーブルの共通部分の結果には、productテーブルのレコードと一致するproductidのみが含まれます。大企業では、データベースに多数のデータレコードが保存されます。すべてのデータを単一のテーブルに保存する代わりに、いくつかの異なるテーブルに分割することができます。データが別々のテーブルに格納されている場合、SQL Serverには、JOIN、UNION、INTERSECTなどのテーブルのデータを組み合わせる多くの方法があります。
INTERSECTの使用規則:
- 列の数とそれらが与えられる順序は、両方のクエリで同じである必要があります
- 使用する列のデータ型は互換性がある必要があります
EXCEPT演算子(除く)
EXCEPT演算子は、この演算子の左側のクエリからすべての個別の行を返し、 EXCEPT演算子の右側の条件に一致する場合、結果セットからすべてのレコードを削除します。
構文:
Query_statement1 EXCEPT Query_statement2
INTERSECT演算子に適用される2つの規則は、EXCEPT演算子にも適用されます。
- 列の数とそれらが与えられる順序は、両方のクエリで同じである必要があります
- 使用する列のデータ型は互換性がある必要があります
例えば:
SELECT Product.ProductId FROM Production.Product EXCEPT SELECT ProductId FROM Sales.SalesOrderDetail
上記の例では、Sales.SalesOrderDetailテーブルに表示されないProduction.Productテーブルのレコードのみが返され、この句は製品検索および分析ビジネスで使用できることがわかります。まだ販売されていません。
EXCEPT演算子は、テーブル2の一致を除いて、最初のテーブルからすべてのレコードを取得することがわかります。したがって、EXCEPTを使用する場合、クエリ内の2つのテーブルの順序が重要であり、INTERSECTではどのテーブルが事前定義されているかは関係ありません。