3.2 KiB
slug | sidebar_label |
---|---|
/ja/sql-reference/statements/select/union | UNION |
UNION句
UNION
はUNION ALL
またはUNION DISTINCT
を明示的に指定して使用できます。
ALL
またはDISTINCT
を指定しない場合、union_default_mode
設定に依存します。UNION ALL
とUNION DISTINCT
の違いは、UNION DISTINCT
ではUNIONの結果に対して重複排除変換が行われることです。これはUNION ALL
を含むサブクエリからSELECT DISTINCT
を行うことと同等です。
任意の数のSELECT
クエリの結果を拡張して組み合わせるためにUNION
を使用できます。例:
SELECT CounterID, 1 AS table, toInt64(count()) AS c
FROM test.hits
GROUP BY CounterID
UNION ALL
SELECT CounterID, 2 AS table, sum(Sign) AS c
FROM test.visits
GROUP BY CounterID
HAVING c > 0
結果のカラムはそのインデックス(SELECT
内の順序)に基づいて一致します。カラム名が一致しない場合、最終結果のカラム名は最初のクエリから取得されます。
Unionのために型キャストが行われます。たとえば、同じフィールドを持つ二つのクエリを結合する際に、そのフィールドが非Nullable
型と互換性のあるNullable
型の場合、結果のUNION
フィールドはNullable
型になります。
UNION
の一部であるクエリを丸括弧で囲むことができます。ORDER BYやLIMITは、個別のクエリに適用され、最終結果には適用されません。最終結果に変換を適用する必要がある場合、すべてのクエリをUNION
でFROM
句内のサブクエリに配置できます。
UNION
をUNION ALL
またはUNION DISTINCT
を明示的に指定せずに使用する場合は、union_default_mode設定を使用してUnionモードを指定できます。設定値はALL
、DISTINCT
、または空文字列のいずれかです。しかし、UNION
をunion_default_mode
設定で空文字列にすると、例外がスローされます。以下の例は、異なる設定値を持つクエリの結果を示しています。
クエリ:
SET union_default_mode = 'DISTINCT';
SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 2;
結果:
┌─1─┐
│ 1 │
└───┘
┌─1─┐
│ 2 │
└───┘
┌─1─┐
│ 3 │
└───┘
クエリ:
SET union_default_mode = 'ALL';
SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 2;
結果:
┌─1─┐
│ 1 │
└───┘
┌─1─┐
│ 2 │
└───┘
┌─1─┐
│ 2 │
└───┘
┌─1─┐
│ 3 │
└───┘
UNION/UNION ALL/UNION DISTINCT
の一部であるクエリは同時に実行され、その結果を組み合わせることができます。
参照