No mundo do SQL, a capacidade de juntar dados de várias consultas é super importante, e o SQL tem funções poderosas como UNION e UNION ALL para fazer isso.
Como você vai ver, entender as diferenças sutis entre as funções UNION e UNION ALL no SQL é essencial para uma consulta e gerenciamento eficientes de dados. Este tutorial explica as principais semelhanças, diferenças e cenários de uso usando conjuntos de dados complementares para te ajudar a otimizar suas consultas SQL.
A resposta curta: SQL UNION vs. UNION ALL
A principal diferença é que UNION tira os registros duplicados, enquanto UNION ALL inclui todas as duplicatas. Essa diferença não só muda o número de linhas no resultado da consulta, mas também afeta o desempenho.
Recurso
UNIÃO
UNION ALL
Duplicatas
Tira os registros duplicados
Guarda todos os registros (incluindo duplicatas)
Desempenho
Mais lento (precisa classificar/hashar os dados para encontrar duplicatas)
Mais rápido (simplesmente adiciona os dados ao resultado)
Operação
Teoria dos Conjuntos (União Matemática)
Anexando/Empilhando Resultados
Vamos dar uma olhada em duas tabelas de exemplo, employees_2023 e employees_2024, que mostram os registros dos funcionários de dois anos diferentes.
Agora, vamos juntar nossas duas tabelas usando a função UNION.
SELECT employee_id, name, department FROM employees_2023
UNIONSELECT employee_id, name, department FROM employees_2024;Tecnologia
employee_id
nome
departamento
1
Alice
HR
2
Bob
IT
3
Charlie
Finanças
4
David
Marketing
Neste resultado, os registros duplicados são removidos. Agora, vamos comparar isso com o resultado que obtemos depois de usar UNION ALL.
SELECT employee_id, name, department FROM employees_2023
UNIONALLSELECT employee_id, name, department FROM employees_2024;Tecnologia
employee_id
nome
departamento
1
Vivo
HR
2
Bob
IT
3
Charlie
Finanças
2
Bob
IT
3
Charlie
Finanças
4
David
Marketing
Neste resultado, todos os registros estão incluídos e as duplicatas não são removidas.
O que é UNION no SQL?
A função ` UNION ` junta os resultados de duas ou mais consultas ` SELECT ` num único conjunto de resultados, tirando as linhas que se repetem. Cada instrução ` SELECT ` dentro da instrução ` UNION ` precisa ter o mesmo número de colunas. Além disso, eles precisam ter tipos de dados parecidos e as colunas também precisam estar na mesma ordem. Pra entender como funciona, vamos criar duas tabelas de exemplo aqui embaixo.
O código acima vai criar as duas tabelas que vamos usar neste tutorial, sales_team e support_team, respectivamente. Você pode ver as tabelas usando o código abaixo.
São tabelas pequenas com três registros cada, e os nomes das colunas são bem claros. Agora que já criamos nossas duas tabelas, vamos usar a função UNION.
SELECT employee_id, employee_name
FROM sales_team
UNIONSELECT employee_id, employee_name
FROM support_team;Tecnologia
Resultado da função UNION. Imagem do autor
Você pode ver que a entrada duplicada de employee_id, que tem o valor de 3, foi removida.
Quais são os casos de uso do UNION no SQL?
Aqui estão alguns casos de uso comuns para a função UNION.
Combinando resultados de diferentes tabelas: Quando você quer juntar dados de várias tabelas e garantir que não haja registros duplicados, a função UNION é a escolha certa.
Lidando com diferentes fontes de dados: O UNION é útil quando você quer juntar tabelas de diferentes fontes de dados.
Removendo duplicatas entre consultas: Quando você quiser garantir a exclusividade do conjunto de resultados combinados, use UNION.
O que é UNION ALL no SQL?
A função ` UNION ALL ` junta os resultados de duas ou mais consultas ` SELECT `, incluindo todas as linhas duplicadas. Essa função é mais rápida do que UNION porque não se preocupa em remover duplicatas.
SELECT employee_id, employee_name
FROM sales_team
UNIONALLSELECT employee_id, employee_name
FROM support_team;Tecnologia
Resultado da função UNION ALL. Imagem do autor
Você pode ver que, nesse caso, as entradas duplicadas são repetidas e não removidas.
Quais são os casos de uso do UNION ALL no SQL?
Aqui estão alguns casos de uso comuns para a função UNION ALL.
Combinando resultados com duplicatas: Use UNION ALL quando precisar juntar os resultados de várias consultas e manter todas as linhas duplicadas.
Considerações sobre desempenho:UNION ALL é mais eficiente em termos de tempo do que a função UNION, porque não precisa daquela etapa extra de tirar as duplicatas.
Juntando dados de diferentes épocas: Quando você junta dados de diferentes épocas ou fontes e precisa manter as entradas duplicadas, é melhor usar o método de agregação “ UNION ALL ”.
Relatórios e análises: Para fins de relatório, onde todos os registros, incluindo duplicatas, são necessários, o UNION ALL é adequado.
UNION e UNION ALL: Semelhanças e diferenças
Vamos criar uma tabela resumida das semelhanças e diferenças.
Recurso
UNIÃO
UNION ALL
Linhas duplicadas
Removido
Incluído
Desempenho
Mais lento
Mais rápido
Caso de uso
Quando você precisa de registros exclusivos
Quando você precisar de todos os registros
Tamanho do resultado
Menor
Maior
Diferenças de sintaxe entre UNION e UNION ALL em diferentes dialetos SQL
Embora a sintaxe básica seja a mesma em diferentes dialetos SQL, há pequenas variações dependendo da plataforma. Se você der uma olhada no código, vai ver que na maioria das plataformas, tipo SQL Server, Oracle, MySQL, PostgreSQL ou BigQuery, ele vai ser parecido com o que tá mostrado abaixo.
SELECT employee_id, employee_name
FROM sales_team
UNIONALLSELECT employee_id, employee_name
FROM support_team;Tecnologia
Os comandos básicos nesses dialetos SQL continuam os mesmos, com algumas diferenças e nuances:
Como lidar com NULLs e colações: Diferentes dialetos SQL podem ter regras diferentes para lidar com valores de NULL e classificação de strings.
Otimizações de desempenho: As otimizações de desempenho e a eficiência de execução podem variar.
Tratamento de erros e avisos: Diferentes dialetos podem lidar com erros e avisos de maneiras diferentes ao usar essas funções.
Funções e recursos específicos da plataforma: Alguns dialetos SQL podem oferecer funções ou recursos adicionais que podem ser usados junto com UNION e UNION ALL para cenários mais complexos.
O comando é bem diferente no caso do PySpark, que funciona num ambiente distribuído. O código está abaixo, assumindo que df1 e df2 são os nomes dos dois data frames que consistem nas duas tabelas que criamos acima. :
Embora UNION e UNION ALL sejam poderosos, eles são bem rígidos em relação à sintaxe. Se sua consulta está dando erro, é provável que esteja violando uma dessas três regras de ouro.
1. A incompatibilidade do número de colunas
O erro mais comum que os usuários encontram é uma incompatibilidade no número de colunas. Para juntar dois conjuntos de dados, o formato das tabelas precisa ser igual. Não dá pra empilhar uma tabela com 3 colunas em cima de uma tabela com 2 colunas.
O erro:
-- This will fail because the column counts do not matchSELECT employee_id, name, department
FROM employees_2023
UNIONSELECT employee_id, name
FROM employees_2024;Tecnologia
A solução: Certifique-se de que ambas as instruções ` SELECT ` solicitem exatamente o mesmo número de colunas. Se a segunda tabela estiver com dados faltando (como department), você pode escolher NULL como um espaço reservado para fazer as contagens baterem:
SELECT employee_id, name, department FROM employees_2023
UNIONSELECT employee_id, name,NULLas department FROM employees_2024;Tecnologia
2. Compatibilidade de tipos de dados
O SQL junta os resultados com base na posição, não no nome da coluna. O tipo de dados da primeira coluna da sua primeira consulta precisa ser igual (ou compatível) com o tipo de dados da primeira coluna da sua segunda consulta.
O erro: Se você trocar acidentalmente a ordem das colunas, o SQL tentará empilhar um número (ID) em cima de uma string (nome), causando um erro de conversão de tipo de dados.
-- This fails because Column 1 (ID - INT) cannot combine with Column 1 (Name - VARCHAR)SELECT employee_id, name FROM employees_2023
UNIONSELECT name, employee_id FROM employees_2024;Tecnologia
A solução: Sempre dá uma olhada se suas colunas estão na mesma ordem em todas as instruções ` SELECT ` dentro do ` UNION`.
3. Limitações da ORDER BY
Um ponto que costuma causar confusão é onde colocar a cláusula ` ORDER BY `. Não dá pra ordenar as subconsultas individuais dentro de uma operação ` UNION `; só dá pra ordenar o resultado final combinado.
O erro: Usar ORDER BY antes da consulta final vai dar um erro de sintaxe.
-- INCORRECT SYNTAXSELECT employee_id, name FROM employees_2023
ORDERBY employee_id -- You cannot sort here!UNIONSELECT employee_id, name FROM employees_2024;Tecnologia
A solução: Coloque a cláusula ` ORDER BY ` bem no final da sua consulta. Isso aplica a classificação a todo o conjunto de resultados combinados.
-- CORRECT SYNTAXSELECT employee_id, name FROM employees_2023
UNIONSELECT employee_id, name FROM employees_2024
ORDERBY employee_id;-- Sorts the final resultTecnologia
Considerações finais
É essencial entender a aplicação de UNION em oposição a UNION ALL no gerenciamento eficiente de dados usando SQL. Enquanto UNION seleciona só os registros diferentes, UNION ALL pega todos eles, afetando o desempenho e o tamanho do conjunto de resultados. Use esse conhecimento para escolher a função certa para suas necessidades específicas.
Para saber mais, dá uma olhada nessas fontes:
Introdução ao SQL: Aprenda a criar e consultar bancos de dados relacionais usando SQL.
Fundamentos do SQL: Aprenda as habilidades básicas de SQL que você precisa para interagir e consultar seus dados.
Certificação SQL Associate: Mostre suas habilidades em SQL extraindo os dados certos de um banco de dados e usando-os para responder a perguntas comuns sobre dados.
SQL intermediário: Com este curso prático, você aprenderá tudo o que precisa saber para analisar dados usando seu próprio código SQL hoje mesmo.
Profissional experiente em funções de ciência de dados, inteligência artificial, análise e estratégia, com mais de 18 anos de experiência nas áreas de -: Ciência de dados, ML e IA ~ Ciência de dados, machine learning supervisionado e não supervisionado, aprendizagem profunda, modelagem preditiva, processamento de linguagem natural (NLP), modelagem e análise estatística, otimização, estratégia de negócios e análise ~ desenvolvimento e avaliação de modelos de negócios, análise descritiva e diagnóstica, EDA, visualização, análise de causa raiz, análise de sensibilidade e cenário.
Perguntas mais frequentes
Qual é a principal diferença entre SQL UNION e UNION ALL?⌄
UNION remove registros duplicados, enquanto UNION ALL inclui todas as duplicatas.
Tem alguma diferença de desempenho entre UNION e UNION ALL?⌄
Sim, o comando ` UNION ` geralmente é mais lento porque remove as duplicatas.
Tem casos específicos em que o UNION ALL é melhor do que o UNION?⌄
UNION ALL é melhor quando você precisa de todos os registros, incluindo os duplicados, como em relatórios e análises.
Quando devo usar SQL UNION em vez de UNION ALL?⌄
Use UNION quando precisar de um conjunto de resultados combinados sem duplicatas.
Como os diferentes dialetos SQL afetam o uso de UNION e UNION ALL?⌄
Embora a sintaxe básica seja consistente, pode haver pequenas variações no desempenho, no tratamento de NULLs e na classificação entre os dialetos SQL.
Explore como o uso de um alias SQL simplifica os nomes de colunas e tabelas. Saiba por que usar um alias SQL é fundamental para melhorar a legibilidade e gerenciar uniões complexas.
Saiba como selecionar facilmente várias colunas de uma tabela de banco de dados em SQL ou selecionar todas as colunas de uma tabela em uma consulta simples.
No mundo do SQL, a capacidade de juntar dados de várias consultas é super importante, e o SQL tem funções poderosas como
UNIONeUNION ALLpara fazer isso.Como você vai ver, entender as diferenças sutis entre as funções
UNIONeUNION ALLno SQL é essencial para uma consulta e gerenciamento eficientes de dados. Este tutorial explica as principais semelhanças, diferenças e cenários de uso usando conjuntos de dados complementares para te ajudar a otimizar suas consultas SQL.A resposta curta: SQL UNION vs. UNION ALL
A principal diferença é que
UNIONtira os registros duplicados, enquantoUNION ALLinclui todas as duplicatas. Essa diferença não só muda o número de linhas no resultado da consulta, mas também afeta o desempenho.Vamos dar uma olhada em duas tabelas de exemplo,
employees_2023eemployees_2024, que mostram os registros dos funcionários de dois anos diferentes.employee_id
nome
departamento
1
Alice
HR
2
Bob
IT
3
Charlie
Finanças
employee_id
nome
departamento
2
Bob
IT
3
Charlie
Finanças
4
David
Marketing
Agora, vamos juntar nossas duas tabelas usando a função
UNION.employee_id
nome
departamento
1
Alice
HR
2
Bob
IT
3
Charlie
Finanças
4
David
Marketing
Neste resultado, os registros duplicados são removidos. Agora, vamos comparar isso com o resultado que obtemos depois de usar
UNION ALL.employee_id
nome
departamento
1
Vivo
HR
2
Bob
IT
3
Charlie
Finanças
2
Bob
IT
3
Charlie
Finanças
4
David
Marketing
Neste resultado, todos os registros estão incluídos e as duplicatas não são removidas.
O que é UNION no SQL?
A função `
UNION` junta os resultados de duas ou mais consultas `SELECT` num único conjunto de resultados, tirando as linhas que se repetem. Cada instrução `SELECT` dentro da instrução `UNION` precisa ter o mesmo número de colunas. Além disso, eles precisam ter tipos de dados parecidos e as colunas também precisam estar na mesma ordem. Pra entender como funciona, vamos criar duas tabelas de exemplo aqui embaixo.O código acima vai criar as duas tabelas que vamos usar neste tutorial,
sales_teamesupport_team, respectivamente. Você pode ver as tabelas usando o código abaixo.Registros na tabela equipe_de_vendas. Imagem do autor
Registros na tabela support_team. Imagem do autor
São tabelas pequenas com três registros cada, e os nomes das colunas são bem claros. Agora que já criamos nossas duas tabelas, vamos usar a função
UNION.Resultado da função UNION. Imagem do autor
Você pode ver que a entrada duplicada de
employee_id, que tem o valor de3, foi removida.Quais são os casos de uso do UNION no SQL?
Aqui estão alguns casos de uso comuns para a função
UNION.Combinando resultados de diferentes tabelas: Quando você quer juntar dados de várias tabelas e garantir que não haja registros duplicados, a função
UNIONé a escolha certa.Lidando com diferentes fontes de dados: O
UNIONé útil quando você quer juntar tabelas de diferentes fontes de dados.Removendo duplicatas entre consultas: Quando você quiser garantir a exclusividade do conjunto de resultados combinados, use
UNION.O que é UNION ALL no SQL?
A função `
UNION ALL` junta os resultados de duas ou mais consultas `SELECT`, incluindo todas as linhas duplicadas. Essa função é mais rápida do queUNIONporque não se preocupa em remover duplicatas.Resultado da função UNION ALL. Imagem do autor
Você pode ver que, nesse caso, as entradas duplicadas são repetidas e não removidas.
Quais são os casos de uso do UNION ALL no SQL?
Aqui estão alguns casos de uso comuns para a função
UNION ALL.UNION ALLquando precisar juntar os resultados de várias consultas e manter todas as linhas duplicadas.UNION ALLé mais eficiente em termos de tempo do que a funçãoUNION, porque não precisa daquela etapa extra de tirar as duplicatas.UNION ALL”.UNION ALLé adequado.UNION e UNION ALL: Semelhanças e diferenças
Vamos criar uma tabela resumida das semelhanças e diferenças.
Recurso
UNIÃO
UNION ALL
Linhas duplicadas
Removido
Incluído
Desempenho
Mais lento
Mais rápido
Caso de uso
Quando você precisa de registros exclusivos
Quando você precisar de todos os registros
Tamanho do resultado
Menor
Maior
Diferenças de sintaxe entre UNION e UNION ALL em diferentes dialetos SQL
Embora a sintaxe básica seja a mesma em diferentes dialetos SQL, há pequenas variações dependendo da plataforma. Se você der uma olhada no código, vai ver que na maioria das plataformas, tipo SQL Server, Oracle, MySQL, PostgreSQL ou BigQuery, ele vai ser parecido com o que tá mostrado abaixo.
Os comandos básicos nesses dialetos SQL continuam os mesmos, com algumas diferenças e nuances:
NULLe classificação de strings.UNIONeUNION ALLpara cenários mais complexos.O comando é bem diferente no caso do PySpark, que funciona num ambiente distribuído. O código está abaixo, assumindo que
df1edf2são os nomes dos dois data frames que consistem nas duas tabelas que criamos acima. :3 Regras e erros comuns ao usar SQL UNION
Embora
UNIONeUNION ALLsejam poderosos, eles são bem rígidos em relação à sintaxe. Se sua consulta está dando erro, é provável que esteja violando uma dessas três regras de ouro.1. A incompatibilidade do número de colunas
O erro mais comum que os usuários encontram é uma incompatibilidade no número de colunas. Para juntar dois conjuntos de dados, o formato das tabelas precisa ser igual. Não dá pra empilhar uma tabela com 3 colunas em cima de uma tabela com 2 colunas.
O erro:
A solução: Certifique-se de que ambas as instruções `
SELECT` solicitem exatamente o mesmo número de colunas. Se a segunda tabela estiver com dados faltando (comodepartment), você pode escolherNULLcomo um espaço reservado para fazer as contagens baterem:2. Compatibilidade de tipos de dados
O SQL junta os resultados com base na posição, não no nome da coluna. O tipo de dados da primeira coluna da sua primeira consulta precisa ser igual (ou compatível) com o tipo de dados da primeira coluna da sua segunda consulta.
O erro: Se você trocar acidentalmente a ordem das colunas, o SQL tentará empilhar um número (ID) em cima de uma string (nome), causando um erro de conversão de tipo de dados.
A solução: Sempre dá uma olhada se suas colunas estão na mesma ordem em todas as instruções `
SELECT` dentro do `UNION`.3. Limitações da ORDER BY
Um ponto que costuma causar confusão é onde colocar a cláusula `
ORDER BY`. Não dá pra ordenar as subconsultas individuais dentro de uma operação `UNION`; só dá pra ordenar o resultado final combinado.O erro: Usar
ORDER BYantes da consulta final vai dar um erro de sintaxe.A solução: Coloque a cláusula `
ORDER BY` bem no final da sua consulta. Isso aplica a classificação a todo o conjunto de resultados combinados.Considerações finais
É essencial entender a aplicação de
UNIONem oposição aUNION ALLno gerenciamento eficiente de dados usando SQL. EnquantoUNIONseleciona só os registros diferentes,UNION ALLpega todos eles, afetando o desempenho e o tamanho do conjunto de resultados. Use esse conhecimento para escolher a função certa para suas necessidades específicas.Para saber mais, dá uma olhada nessas fontes: