UNION 文、EXCEPT 文、INTERSECT 文には、次のルールが適用されます。
select リストの項目数は同じにする クエリ内のすべての SELECT リストは、式 (カラム名、算術式、集合関数など) の数を同じにします。次の文は、最初の select リストが 2 番目のリストより長いので無効です。
SELECT store_id, city, state FROM stores UNION SELECT store_id, city FROM stores_east; |
データ型を一致させる SELECT リストで対応する式のデータ型を同じにするか、2 種類のデータ型の間で暗黙的データ変換ができるようにします。または、明示的変換を指定します。
たとえば、CHAR データ型のカラムと INT データ型のカラムの間では、明示的変換が指定されなければ UNION、INTERSECT、または EXCEPT は不可能です。しかし、MONEY データ型のカラムと INT データ型のカラムの間では、集合操作が可能です。
カラム順 集合操作の各クエリで、対応する式を同じ順序で並べます。これは、集合演算子が、SELECT 句の各クエリで指定された順に 1 対 1 で式を比較するためです。
複数の集合操作 次の例のように、いくつかの集合操作を一緒に配列できます。
SELECT City AS Cities FROM Contacts UNION SELECT City FROM Customers UNION SELECT City FROM Employees; |
UNION 文では、クエリの順番は重要ではありません。INTERSECT では、2 つ以上のクエリがある場合、順番は重要です。EXCEPT では、順番は常に重要です。
カラム見出し UNION の結果生成されるテーブルのカラム名は、文中の最初のクエリから取得されます。結果セット用に新しいカラム見出しを定義する場合は、次の例のように、最初のクエリの select リストで定義できます。
SELECT City AS Cities FROM Contacts UNION SELECT City FROM Customers; |
次のクエリでは、カラム見出しは UNION 文の最初のクエリで定義した City のままです。
SELECT City FROM Contacts UNION SELECT City AS Cities FROM Customers; |
または、WITH 句を使用してカラム名を定義できます。次に例を示します。
WITH V( Cities ) AS ( SELECT City FROM Contacts UNION SELECT City FROM Customers ) SELECT * FROM V; |
結果の順序付け SELECT 文の WITH 句を使用して、select リスト内のカラム名に順序を付けられます。次に例を示します。
WITH V( CityName ) AS ( SELECT City AS Cities FROM Contacts UNION SELECT City FROM Customers ) SELECT * FROM V ORDER BY CityName; |
また、クエリのリストの最後に単一の ORDER BY 句を使用できますが、次の例のように、カラム名ではなく整数を使用してください。
SELECT City AS Cities FROM Contacts UNION SELECT City FROM Customers ORDER BY 1; |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |