SQL 速習チュートリアル

SQL UNION 演算子

1. SQL UNION 演算子の概要

UNION 演算子は、2つ以上の SELECT 文の結果セットを結合するために使用されます。

この演算子は、結果セットから重複する行を自動的に削除します。

1.1 UNION 使用時の制約事項

UNION を使用するには、以下の条件を満たす必要があります。

  • 各 SELECT 文のカラム数が同じであること
  • 各カラムのデータ型が類似していること
  • 各 SELECT 文のカラムの順序が一致していること

2. UNION の構文

SELECT カラム名 FROM テーブル1
UNION
SELECT カラム名 FROM テーブル2;

       注意: 結果セットに表示されるカラム名は、通常、最初の SELECT 文で指定されたカラム名になります。

3. デモ用データベース

以下は「Customers(顧客)」テーブルからの抜粋です:

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico

次は「Suppliers(仕入先)」テーブルからの抜粋です:

SupplierIDSupplierNameContactNameAddressCityPostalCodeCountry
1Exotic LiquidCharlotte Cooper49 Gilbert St.LondonEC1 4SDUK
2New Orleans Cajun DelightsShelley BurkeP.O. Box 78934New Orleans70117USA
3Grandma Kelly's HomesteadRegina Murphy707 Oxford Rd.Ann Arbor48104USA

4. SQL UNION の実装例

以下の SQL は、「Customers」と「Suppliers」の両テーブルから、ユニーク(一意)な国名を返します。

SELECT Country FROM Customers
UNION
SELECT Country FROM Suppliers
ORDER BY Country;

       注意: 一部の顧客と仕入先が同じ国に存在する場合、各国は1回だけリストに表示されます。これは、UNION が重複のない(Distinctな)値のみを選択するためです。重複する値も含めてすべて抽出したい場合は、UNION ALL を使用してください。

5. WHERE 句を伴う SQL UNION

以下の例では、WHERE 句を追加して、「Customers」と「Suppliers」の両テーブルからドイツ(Germany)のユニークな都市名のみを返します。

SELECT City, Country FROM Customers
WHERE Country='Germany'
UNION
SELECT City, Country FROM Suppliers
WHERE Country='Germany'
ORDER BY City;

6. 応用的な UNION の実装例

以下の SQL ステートメントは、すべての顧客と仕入先を一覧表示します。

SELECT 'Customer' AS 区分, ContactName, City, Country
FROM Customers
UNION
SELECT 'Supplier', ContactName, City, Country
FROM Suppliers;

上記のクエリで使用されている 'Customer' AS 区分 に注目してください。これはエイリアス(Alias)です。エイリアスはカラムに一時的な名前を付けるために使用されます。ここでは「区分」という一時的なカラムを作成し、その連絡先が「Customer(顧客)」なのか「Supplier(仕入先)」なのかを判別できるようにしています。