Snowpark Migration Accelerator: Union

Descrição

Mescla duas subconsultas em uma única consulta. O Databricks SQL oferece três operadores de conjunto que permitem combinar as consultas:

  • EXCEPT - Recupera todas as linhas da primeira consulta que não aparecem na segunda consulta

  • INTERSECT - Retorna apenas as linhas que aparecem em ambas as consultas

  • UNION - Combina os resultados de duas ou mais consultas em um único conjunto de resultados

Referência da linguagem Databricks SQL UNION

Os operadores de conjunto permitem combinar várias consultas em um único resultado. Para obter mais detalhes, consulte Referência da linguagem Snowflake SQL UNION.

Sintaxe

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

Amostra de padrões da origem

Dados de configuração

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

Código do padrão

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

Operador EXCEPT (MINUS): O operador EXCEPT, também conhecido como MINUS, remove as linhas da primeira consulta que aparecem no conjunto de resultados da segunda consulta. Ele retorna apenas as linhas exclusivas da primeira consulta que não existem na segunda consulta.

c

3

4

Operador EXCEPT ALL (MINUS ALL): Remove registros duplicados

c

3

3

4

Operador INTERSECT: Retorna apenas as linhas que aparecem em ambos os conjuntos de resultados, eliminando as duplicatas. Ele compara os resultados de duas ou mais instruções SELECT e retorna apenas os registros correspondentes. Retorna apenas as linhas que aparecem em ambos os conjuntos de resultados, eliminando as duplicatas.

c

1

2

Operador INTERSECT DISTINCT: Retorna apenas as linhas exclusivas que aparecem em ambos os conjuntos de resultados, eliminando as duplicatas. Retorna apenas as linhas exclusivas que aparecem em ambas as consultas, eliminando quaisquer duplicatas do conjunto de resultados.

c

1

2

Operador INTERSECT ALL: Retorna todas as linhas correspondentes de várias consultas, inclusive as duplicadas. Diferentemente do operador INTERSECT padrão, que remove as duplicatas, INTERSECT ALL preserva as linhas duplicadas no conjunto de resultados finais. Retorna todas as linhas que aparecem em ambos os conjuntos de resultados, inclusive as duplicadas. Ao contrário do INTERSECT, que remove as duplicatas, o INTERSECT ALL preserva as linhas duplicadas com base em sua frequência em ambos os conjuntos.

c

1

2

2

Operador UNION: O operador UNION combina os resultados de duas ou mais instruções SELECT em um único conjunto de resultados. Por padrão, remove as linhas duplicadas do conjunto de resultados combinados. O operador UNION combina os resultados de duas ou mais instruções SELECT em um único conjunto de resultados. Ele remove as linhas duplicadas dos resultados combinados.

c

1

3

5

4

2

Operador UNION DISTINCT: O operador UNION DISTINCT combina dois ou mais conjuntos de resultados e remove todas as linhas duplicadas do resultado final. Ele retorna apenas linhas exclusivas de todas as consultas combinadas. O operador UNION DISTINCT combina linhas de duas ou mais consultas e remove todas as linhas duplicadas do conjunto de resultados final.

c

1

3

5

4

2

Operador UNION ALL: O operador UNION ALL combina linhas de duas ou mais consultas sem remover registros duplicados. Ao contrário do operador UNION, o UNION ALL retém todas as linhas, inclusive as duplicadas, o que torna a execução mais rápida, pois não precisa realizar a verificação de duplicatas. Esse operador combina os resultados de duas ou mais instruções SELECT e inclui todas as linhas, inclusive as duplicadas. Ao contrário do UNION, que remove linhas duplicadas, o UNION ALL retém todas as linhas de todas as instruções 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

Operador EXCEPT (MINUS): Remove registros duplicados

O operador EXCEPT, também conhecido como MINUS, compara duas consultas e retorna apenas os registros exclusivos da primeira consulta que não aparecem na segunda consulta. Ele elimina as linhas duplicadas do conjunto de resultados.

c

3

4

Operador EXCEPT ALL (MINUS ALL): Remove linhas duplicadas

c

3

3

4

Operador INTERSECT:

c

1

2

Operador INTERSECT DISTINCT:

c

1

2

Operador INTERSECT ALL:

c

1

2

2

Operador UNION:

c

1

3

5

4

2

Operador UNION DISTINCT:

c

1

3

5

4

2

Operador UNION ALL:

c

3

1

2

2

3

4

5

1

1

2

Problemas conhecidos

Sem EWIs relacionados