Snowpark Migration Accelerator: 和集合

説明

2つのサブクエリを1つのクエリにマージします。Databricks SQL には、クエリを組み合わせるための3つのセット演算子が用意されています。

  • EXCEPT - 最初のクエリから、2番目のクエリに表示されない行をすべて取得します。

  • INTERSECT - 両方のクエリに現れる行のみを返します。

  • UNION - 2つ以上のクエリの結果を単一の結果セットにまとめます。

Databricks SQL 言語参照 UNION

セット演算子を使用すると、複数のクエリを単一の結果にまとめることができます。詳細については、 Snowflake SQL 言語参照 UNION をご参照ください。

構文

subquery1 { { UNION [ ALL | DISTINCT ] |
              INTERSECT [ ALL | DISTINCT ] |
              EXCEPT [ ALL | DISTINCT ] } subquery2 } [...] }
Copy
[ ( ] <query> [ ) ] { INTERSECT | { MINUS | EXCEPT } | UNION [ ALL ] } [ ( ] <query> [ ) ]
[ ORDER BY ... ]
[ LIMIT ... ]
Copy

サンプルソースパターン

セットアップデータ

Databricks

CREATE TEMPORARY VIEW number1(c) AS VALUES (3), (1), (2), (2), (3), (4);

CREATE TEMPORARY VIEW number2(c) AS VALUES (5), (1), (1), (2);
Copy

Snowflake

CREATE TEMPORARY TABLE number1(c int);
INSERT INTO number1 VALUES (3), (1), (2), (2), (3), (4);

CREATE TEMPORARY TABLE number2(c int);
INSERT INTO number2 VALUES (5), (1), (1), (2);
Copy

パターンコード

Databricks

-- EXCEPT (MINUS) Operator:
SELECT c FROM number1 EXCEPT SELECT c FROM number2;

SELECT c FROM number1 MINUS SELECT c FROM number2;

-- EXCEPT ALL (MINUS ALL) Operator:
SELECT c FROM number1 EXCEPT ALL (SELECT c FROM number2);

SELECT c FROM number1 MINUS ALL (SELECT c FROM number2);

-- INTERSECT Operator:
(SELECT c FROM number1) INTERSECT (SELECT c FROM number2);

-- INTERSECT DISTINCT Operator:
(SELECT c FROM number1) INTERSECT DISTINCT (SELECT c FROM number2);

-- INTERSECT ALL Operator:
(SELECT c FROM number1) INTERSECT ALL (SELECT c FROM number2);

-- UNION Operator:
(SELECT c FROM number1) UNION (SELECT c FROM number2);

-- UNION DISTINCT Operator:
(SELECT c FROM number1) UNION DISTINCT (SELECT c FROM number2);

-- UNION ALL Operator:
SELECT c FROM number1 UNION ALL (SELECT c FROM number2);
Copy

EXCEPT (MINUS)演算子: MINUS としても知られる EXCEPT 演算子は、2番目のクエリの結果セットに現れる行を最初のクエリから削除します。これは、最初のクエリから、2番目のクエリに存在しない一意な行のみを返します。

c

3

4

EXCEPT ALL (MINUS ALL)演算子: 重複記録を削除します

c

3

3

4

INTERSECT 演算子: 両方の結果セットに現れる行のみを返し、重複を排除します。2つ以上の SELECT ステートメントの結果を比較し、一致する記録のみを返します。両方の結果セットに現れる行のみを返し、重複を排除します。

c

1

2

INTERSECT DISTINCT 演算子: 両方の結果セットに現れる一意な行のみを返し、重複を排除します。両方のクエリに現れる一意な行のみを返し、結果セットから重複を排除します。

c

1

2

INTERSECT ALL 演算子: 複数のクエリから、重複を含めて一致する行すべてを返します。重複行を削除する標準的な INTERSECT 演算子とは異なり、 INTERSECT ALL は最終結果セットの重複行を保持します。重複を含め、両方の結果セットに現れるすべての行を返します。重複を除去する INTERSECT とは異なり、 INTERSECT ALL は、両方のセットにおける頻度に基づいて重複行を保持します。

c

1

2

2

UNION 演算子: UNION 演算子は、2つ以上の SELECT ステートメントの結果を単一の結果セットにまとめます。デフォルトでは、結合された結果セットから重複行を削除します。UNION 演算子は、2つ以上の SELECT ステートメントの結果を単一の結果セットにまとめます。結合結果から重複行を削除します。

c

1

3

5

4

2

UNION DISTINCT 演算子: UNION DISTINCT 演算子は2つ以上の結果セットを結合し、最終出力から重複行を取り除きます。すべてのクエリを結合した一意な行のみを返します。UNION DISTINCT 演算子は、2つ以上のクエリの行を結合し、最終結果セットから重複行を削除します。

c

1

3

5

4

2

UNION ALL 演算子: UNION ALL 演算子は、2つ以上のクエリから重複記録を削除せずに行を結合します。UNION 演算子とは異なり、 UNION ALL は重複を含むすべての行を保持します。重複確認を行う必要がないため、実行速度が速くなります。この演算子は、2つ以上の SELECT ステートメントの結果を結合し、重複を含むすべての行を含めます。重複行を削除する UNION とは異なり、 UNION ALL はすべての SELECT ステートメントのすべての行を保持します。

c

3

1

2

2

3

4

5

1

1

2

Snowflake

-- EXCEPT (MINUS) Operator
SELECT c FROM number1 EXCEPT SELECT c FROM number2;

SELECT c FROM number1 MINUS SELECT c FROM number2;

-- EXCEPT ALL (MINUS ALL) Operator:
SELECT number1.c FROM number1 
LEFT JOIN number2 
    ON number1.c = number2.c
WHERE number2.c IS NULL;
-- ** MSC-WARMING - MSC-S000# - EXCEPT ALL IS TRANSFORMED TO A LEFT JOIN. **

SELECT number1.c FROM number1 
LEFT JOIN number2 
    ON number1.c = number2.c
WHERE number2.c IS NULL;
-- ** MSC-WARMING - MSC-S000# - MINUS ALL IS TRANSFORMED TO A LEFT JOIN. **

-- INTERSECT Operator:
(SELECT c FROM number1) INTERSECT (SELECT c FROM number2);

-- INTERSECT DISTINCT Operator:
(SELECT c FROM number1) INTERSECT (SELECT c FROM number2);

-- INTERSECT ALL Operator:
SELECT DISTINCT number1.c FROM number1 
INNER JOIN number2 
    ON number1.c = number2.c;
-- ** MSC-WARMING - MSC-S000# - INTERSECT ALL IS TRANSFORMED TO A INNER JOIN. **

-- UNION Operator:
(SELECT c FROM number1) UNION (SELECT c FROM number2);

-- UNION DISTINCT Operator:
(SELECT c FROM number1) UNION DISTINCT (SELECT c FROM number2);

-- UNION ALL Operator:
SELECT c FROM number1 UNION ALL (SELECT c FROM number2);
Copy

EXCEPT (MINUS)演算子: 重複記録を削除します

MINUS としても知られる EXCEPT 演算子は、2つのクエリを比較し、最初のクエリから、2番目のクエリに表示されない一意な記録のみを返します。結果セットから重複行を削除します。

c

3

4

EXCEPTALL (MINUS ALL)演算子: 重複行を削除します

c

3

3

4

INTERSECT 演算子:

c

1

2

INTERSECT DISTINCT 演算子:

c

1

2

INTERSECT ALL 演算子:

c

1

2

2

UNION 演算子:

c

1

3

5

4

2

UNION DISTINCT 演算子:

c

1

3

5

4

2

UNION ALL 演算子:

c

3

1

2

2

3

4

5

1

1

2

既知の問題

関連する EWIs なし