UNIONを使用したテーブル行の結合
このレッスンでは、UNION句について説明します。 UNION句を使用すると、二つの異なるクエリのテーブル行を一つの結果に結合できます。 異なるテーブルの列を結合する結合とは異なり、unionは異なるテーブルの行を結合します。 以下は、共用体がどのように見えるかの図です
共用体
このレッスンのすべての例は、Microsoft SQL Server Management StudioおよびAdventureWorks2012データベースに基づいています。, での使用を開始したこれらの無償ツールを使ってガイドをはじめ用のSQLサーバーです。
SQLでは、このステートメントは次のようになります
SELECT columnlistFROM table1UNIONSELECT columnlistFROM table2
二つのテーブルを結合するためには、いくつかの要件があります。
- 列の数は、両方のselectステートメントで同じでなければなりません。
- 列は、順番に同じデータ型でなければなりません。
行が結合されると、重複する行が削除されます。 両方のselectステートメントの結果からすべての行を保持する場合は、ALLキーワードを使用します。,
Examples
Union two tables
AdventureWorks2012のすべての製品カテゴリとサブカテゴリのリストを提供するように求められたとします。
SELECT C.NameFROM Production.ProductCategory AS CUNION ALLSELECT S.NameFROM Production.ProductSubcategory AS S
これから、名前の組み合わせリストを取得しますが、どの名前がカテゴリとサブカテゴリであるかを知りたいとします。, これを行うには、カテゴリタイプを示す新しい列を追加します。
SELECT 'category', C.NameFROM Production.ProductCategory AS CUNION ALLSELECT 'subcategory', S.NameFROM Production.ProductSubcategory AS S
Union versus Union All
UNIONとUNION ALLの違いは、UNIONを使用するとunionの結果から一意の行セットが返されることです。UNION ALLはすべての行を返します。
例:
SELECT person.Address.CityFROM person.Address
は19614行を返します。
SELECT person.Address.CityFROM person.AddressUNIONSELECT person.Address.CityFROM person.Address
は、テーブル内の個別の都市名の数である575行を返します。 UNION Allを実行すると、都市名のセット全体が二度返されます。
SELECT person.Address.CityFROM person.AddressUNION ALLSELECT person.Address.CityFROM person.Address
39228行が返されます。,
ご覧のとおり、ALL修飾子を使用することとは大きな違いがあります。 使用しない場合、結果は個別の値になります。 重複は、各結果の行間だけでなく、内部からも削除されます。
Union three tables
管理がソースによって識別されるユーザー、ベンダー、およびストア名の組み合わせリストを必要とするとします。
これを行うには、三つの別々のクエリを作成し、union句を使用してそれらをまとめます。 その後、リストを注文します。,
一見すると、ORDER BY句は最後のselect文にのみ適用されると思うかもしれませんが、実際にはunionによって返されたすべての結果に適用されます。 データベースエンジ
処理順序について疑問がある場合は、括弧”()”を使用して、式と同様に評価の順序を制御できます。 ここでは、一般的に、括弧でどのように見えるかです: