Selecione suas preferências de cookies

Usamos cookies essenciais e ferramentas semelhantes que são necessárias para fornecer nosso site e serviços. Usamos cookies de desempenho para coletar estatísticas anônimas, para que possamos entender como os clientes usam nosso site e fazer as devidas melhorias. Cookies essenciais não podem ser desativados, mas você pode clicar em “Personalizar” ou “Recusar” para recusar cookies de desempenho.

Se você concordar, a AWS e terceiros aprovados também usarão cookies para fornecer recursos úteis do site, lembrar suas preferências e exibir conteúdo relevante, incluindo publicidade relevante. Para aceitar ou recusar todos os cookies não essenciais, clique em “Aceitar” ou “Recusar”. Para fazer escolhas mais detalhadas, clique em “Personalizar”.

UNION, INTERSECT e EXCEPT

Modo de foco
UNION, INTERSECT e EXCEPT - Amazon Redshift

Os operadores de conjunto UNION, INTERSECT e EXCEPT são usados para comparar e mesclar os resultados de duas expressões de consulta separadas. Por exemplo, se você quiser saber quais usuários de um site compram e vendem, mas os nomes de usuários estiverem armazenados em colunas ou tabelas separadas, você pode encontrar a interseção desses dois tipos de usuários. Se você quiser saber quais usuários do site compram, mas não vendem, você pode usar o operador EXCEPT para encontrar a diferença entre as duas listas de usuários. Se quiser criar uma lista com todos os usuários, independentemente da função, use o operador UNION.

Sintaxe

query { UNION [ ALL ] | INTERSECT | EXCEPT | MINUS } query

Parâmetros

query

Uma expressão de consulta que corresponde, na forma de sua lista de seleção, a uma segunda expressão de consulta que segue o operador UNION, INTERSECT ou EXCEPT. As duas expressões devem conter o mesmo número de colunas de saída com tipos de dados compatíveis. Caso contrário, os dois conjuntos de resultados não poderão ser comparados e mesclados. Operações de conjunto não permitem a conversão implícita entre categorias diferentes de tipos de dados. Para obter mais informações, consulte Compatibilidade e conversão dos tipos.

Você pode criar consultas contendo um número ilimitado de expressões de consulta e conectá-las aos operadores UNION, INTERSECT e EXCEPT em qualquer combinação. Por exemplo, a estrutura de consulta a seguir é válida, pressupondo que as tabelas T1, T2 e T3 contenham conjuntos compatíveis de colunas:

select * from t1 union select * from t2 except select * from t3 order by c1;
UNION

Operação de conjunto que retorna linhas de duas expressões de consulta, independentemente das linhas se derivarem de uma ou ambas as expressões.

INTERSECT

Operação de conjunto que retorna linhas derivadas de duas expressões de consulta. As linhas que não forem retornadas por ambas as expressões serão descartadas.

EXCEPT | MINUS

Operação de conjunto que retorna linhas derivadas de uma das duas expressões de consulta. Para se qualificar para o resultado, as linhas precisam existir na primeira tabela de resultados, mas não na segunda. MINUS e EXCEPT são sinônimos.

ALL

A palavra-chave ALL retém todas as linhas duplicadas produzidas por UNION. O comportamento padrão quando a palavra-chave ALL não é utilizada é descartar essas linhas duplicadas. INTERSECT ALL, EXCEPT ALL e MINUS ALL não são compatíveis.

Ordem de avaliação para operadores de conjunto

Os operadores de conjunto UNION e EXCEPT se associam à esquerda. Se não houver parênteses especificados para influenciar a ordem de precedência, uma combinação desses operadores de conjunto será avaliada da esquerda para a direita. Por exemplo, na consulta a seguir, o operador UNION de T1 e T2 é avaliado primeiro, seguido pela operação EXCEPT, que é executada no resultado de UNION:

select * from t1 union select * from t2 except select * from t3 order by c1;

O operador INTERSECT tem precedência sobre os operadores UNION e EXCEPT quando uma combinação de operadores for usada na mesma consulta. Por exemplo, a consulta a seguir avalia a interseção de T2 e T3, e depois une o resultado com T1:

select * from t1 union select * from t2 intersect select * from t3 order by c1;

Adicionando parênteses, você pode aplicar uma ordem diferente de avaliação. No caso a seguir, o resultado da união de T1 e T2 é cruzado com T3, e a consulta provavelmente produzirá um resultado diferente.

(select * from t1 union select * from t2) intersect (select * from t3) order by c1;

Observações de uso

  • Os nomes de colunas obtidos no resultado de uma consulta de operação de conjunto são os nomes de colunas (ou aliases) das tabelas na primeira expressão de consulta. Como esses nomes de coluna podem induzir a erros, os valores na coluna derivam de tabelas em ambos os lados do operador de conjunto, você pode querer fornecer aliases significativos para o conjunto de resultados.

  • Uma expressão de consulta que preceda um operador de conjunto não deve conter uma cláusula ORDER BY. Uma cláusula ORDER BY produz resultados significativos classificados somente quando é usada no final de uma consulta que contenha operadores de conjunto. Nesse caso, a cláusula ORDER BY se aplica a resultados finais de todas as operações de conjunto. A consulta mais externa também pode conter as cláusulas LIMIT e OFFSET padrão.

  • Quando as consultas do operador de conjunto retornam resultados decimais, as colunas de resultados correspondentes são promovidas para retornar a mesma precisão e escala. Por exemplo, na consulta a seguir, em que T1.REVENUE é uma coluna DECIMAL(10,2) e T2.REVENUE é uma coluna DECIMAL(8,4), o resultado decimal é atualizado para DECIMAL(12,4):

    select t1.revenue union select t2.revenue;

    A escala é 4 porque é a escala máxima das duas colunas. A precisão é 12 porque T1.REVENUE requer 8 dígitos à esquerda do ponto decimal (12 - 4 = 8). Essa promoção de tipo garante que todos os valores de ambos os lados de UNION se encaixem no resultado. Para valores de 64 bits, a precisão máxima de resultado é 19 e a escala máxima de resultado é 18. Para valores de 128-bits, a precisão máxima de resultado é 38 e a escala máxima de resultado é 37.

    Se o tipo de dados resultante ultrapassar os limites de precisão e escala do Amazon Redshift, a consulta retornará um erro.

  • Para operações de conjunto, duas linhas são tratadas como idênticas se, para cada par de colunas correspondente, os dois valores de dados forem iguais ou ambos NULL. Por exemplo, se as tabelas T1 e T2 contiverem uma coluna e uma linha, e a linha for NULL em ambas as tabelas, uma operação INTERSECT sobre essas tabelas retornará essa linha.

PrivacidadeTermos do sitePreferências de cookies
© 2025, Amazon Web Services, Inc. ou suas afiliadas. Todos os direitos reservados.