Menu
Coddy logo textTech

Union

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

Uniões são diferentes de junções. Junções usam condições para combinar tabelas, mas uniões 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 assumir que temos as seguintes tabelas:

pessoas_da_alemanha

idnome
1Lena
2Leonie

Pessoas da Inglaterra

IDNome
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 GROUP BY, funções de agregação e ORDER BY envolvendo a união em uma subconsulta. Por exemplo, para contar quantas vezes cada nome aparece em ambas as tabelas:

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

Resultado:

nometotal
Lena2
Leonie1
George1

Aqui, UNION ALL mantém todas as linhas (incluindo duplicatas), de modo que o COUNT reflita o número real de ocorrências. A consulta externa então agrupa e ordena o resultado combinado.

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 total_sales.

Ordene os resultados pelo total de vendas em ordem decrescente.

Folha de consulta

O UNION combina tabelas empilhando-as verticalmente. Ao contrário dos JOINs, os UNIONs não usam condições - eles simplesmente adicionam as tabelas uma sobre a outra.

Sintaxe básica do UNION:

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

Regras do UNION:

  • O número de campos deve ser igual
  • A ordem é importante
  • Colunas na mesma posição devem ter tipos de dados compatíveis

UNION vs UNION ALL:

  • UNION retorna apenas valores distintos
  • UNION ALL retorna todos os registros, incluindo duplicatas
SELECT name FROM germany_people
UNION
SELECT name FROM england_people
SELECT name FROM germany_people
UNION ALL
SELECT name FROM england_people

Você pode usar UNION ALL dentro de uma subconsulta e depois aplicar GROUP BY, ORDER BY e funções de agregação no resultado combinado:

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

Isso conta quantas vezes cada nome aparece em ambas as tabelas, incluindo duplicatas.

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