Menu
Coddy logo textTech

Union

Parte da seção Fundamentos do Journey de SQL da Coddy — lição 48 de 72.

Unions são diferentes de joins. Joins usam condições para combinar tabelas, mas unions apenas adicionam duas tabelas uma sobre a outra. Para usar UNION, escreveremos:

SELECT col1, col2, ... FROM table1
UNION
SELECT col1, col2, ... FROM table2

Ambos os selects devem obedecer às seguintes regras:

  • O número de campos deve ser igual
  • A ordem é importante
  • As colunas na mesma posição devem corresponder aos tipos de dados

Por exemplo, vamos supor que temos as seguintes tabelas:

germany_people

idnome
1Lena
2Leonie

england_people

idname
1George
2Lena

Problema: Queremos criar uma grande tabela com todos os nomes que temos.

SELECT name from germany_people
UNION
SELECT name from england_people

Resultado:

nome
Lena
Leonie
George

UNION retorna apenas valores distintos, enquanto UNION ALL retorna todos os registros como estão:

SELECT name from germany_people
UNION ALL
SELECT name from england_people

Resultado:

nome
Lena
Leonie
George
Lena

Você também pode combinar UNION ALL com funções de agregação, GROUP BY e ORDER BY para resumir dados em várias tabelas. O truque é envolver o UNION ALL dentro de uma subquery, e então aplicar o agrupamento e a ordenação sobre ele.

Por exemplo, suponha que queiramos contar quantas vezes cada nome aparece em ambas as tabelas:

SELECT name, COUNT(*) AS total_count
FROM (
    SELECT name FROM germany_people
    UNION ALL
    SELECT name FROM england_people
) AS combined
GROUP BY name
ORDER BY total_count DESC

Resultado:

nametotal_count
Lena2
Leonie1
George1

Aqui, UNION ALL (não UNION) é usado para que duplicatas como Lena sejam mantidas — caso contrário, elas seriam removidas antes da contagem. A subconsulta mescla todas as linhas e, em seguida, GROUP BY + COUNT as resume. ORDER BY ordena o resultado final.

challenge icon

Desafio

Fácil

Tabelas e colunas disponíveis:

  • <strong>sales_2009</strong>: <strong>product_id</strong>, <strong>quantity_sold</strong>
  • <strong>sales_2010</strong>: <strong>product_id</strong>, <strong>quantity_sold</strong>
  • <strong>sales_2011</strong>: <strong>product_id</strong>, <strong>quantity_sold</strong>

Existem 3 tabelas de vendas.

Encontre a soma das vendas para cada produto de todas as tabelas juntas.

O resultado deve incluir o product_id e o total de vendas.

Nomeie esta coluna como total_sales.

Ordene os resultados pelo total de vendas em ordem decrescente.

Experimente você mesmo

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Fundamentos