Operadores Set
Aplica-se a: SQL do Databricks Runtime do Databricks
Combina duas subconsultas em uma única. O SQL do Databricks dá suporte a três tipos de operadores de conjunto:
EXCEPT
INTERSECT
UNION
Sintaxe
subquery1 { { UNION [ ALL | DISTINCT ] |
INTERSECT [ ALL | DISTINCT ] |
EXCEPT [ ALL | DISTINCT ] } subquery2 } [...] }
subquery1, subquery2
Quaisquer duas cláusulas
subquery
, conforme especificado em SELECT. Ambas as subconsultas devem ter o mesmo número de colunas e compartilhar um tipo menos comum para cada coluna respectiva.UNIÃO [TODOS | DISTINÇÃO]
Retorna o resultado de
subquery1 plus the rows of
subquery2 '.Se
ALL
for especificado, as linhas duplicadas serão preservadas.Se
DISTINCT
for especificado, o resultado não conterá nenhuma linha duplicada. Esse é o padrão.INTERSEÇÃO [TODOS | DISTINÇÃO]
Retorna o conjunto de linhas que estão em ambas as subconsultas.
Se
ALL
for especificado, uma linha que aparece várias vezes nosubquery1
e emsubquery
será retornada várias vezes.Se
DISTINCT
for especificado, o resultado não conterá linha duplicada. Esse é o padrão.EXCEÇÃO [TODOS | DISTINÇÃO]
Retorna as linhas nas
subquery1
quais não estão nosubquery2
.Se
ALL
for especificado, cada linha nosubquery2
removerá exatamente uma das várias correspondênciassubquery1
de.Se
DISTINCT
for especificado, as linhas duplicadas serão removidas desubquery1
antes de aplicar a operação, portanto, todas as correspondências serão removidas e o resultado não terá nenhuma linha duplicada (correspondente ou não correspondente). Esse é o padrão.Você pode especificar
MINUS
como uma alternativa de sintaxe paraEXCEPT
.
Quando as operações INTERSECT
de conjunto de encadeamento têm uma precedência mais alta do que UNION
e EXCEPT
.
O tipo de cada coluna de resultado é o tipo menos comum das respectivas colunas no e subquery1
no subquery2
.
Exemplos
-- Use number1 and number2 tables to demonstrate set operators in this page.
> CREATE TEMPORARY VIEW number1(c) AS VALUES (3), (1), (2), (2), (3), (4);
> CREATE TEMPORARY VIEW number2(c) AS VALUES (5), (1), (1), (2);
> SELECT c FROM number1 EXCEPT SELECT c FROM number2;
3
4
> SELECT c FROM number1 MINUS SELECT c FROM number2;
3
4
> SELECT c FROM number1 EXCEPT ALL (SELECT c FROM number2);
3
3
4
> SELECT c FROM number1 MINUS ALL (SELECT c FROM number2);
3
3
4
> (SELECT c FROM number1) INTERSECT (SELECT c FROM number2);
1
2
> (SELECT c FROM number1) INTERSECT DISTINCT (SELECT c FROM number2);
1
2
> (SELECT c FROM number1) INTERSECT ALL (SELECT c FROM number2);
1
2
2
> (SELECT c FROM number1) UNION (SELECT c FROM number2);
1
3
5
4
2
> (SELECT c FROM number1) UNION DISTINCT (SELECT c FROM number2);
1
3
5
4
2
> SELECT c FROM number1 UNION ALL (SELECT c FROM number2);
3
1
2
2
3
4
5
1
1
2