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 table2Ambos 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
| id | nome |
| 1 | Lena |
| 2 | Leonie |
Pessoas da Inglaterra
| ID | Nome |
| 1 | George |
| 2 | Lena |
Problema: Queremos criar uma grande tabela com todos os nomes que temos.
SELECT name from germany_people
UNION
SELECT name from england_peopleResultado:
| 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_peopleResultado:
| 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 DESCResultado:
| nome | total |
| Lena | 2 |
| Leonie | 1 |
| George | 1 |
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.
Desafio
FácilTabelas 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 table2Regras 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:
UNIONretorna apenas valores distintosUNION ALLretorna todos os registros, incluindo duplicatas
SELECT name FROM germany_people
UNION
SELECT name FROM england_peopleSELECT name FROM germany_people
UNION ALL
SELECT name FROM england_peopleVocê 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 DESCIsso conta quantas vezes cada nome aparece em ambas as tabelas, incluindo duplicatas.
Experimente você mesmo
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
4More Keywords
The IN keywordThe BETWEEN keywordThe LIKE keywordThe AS keywordRecap - Cellphone Models2Conditions
Conditions BasicsThe AND keywordThe OR keywordThe NOT keywordMultiple Conditions CombinedParenthesisBooleans5Arithmetic Operations
Mathematical OperatorsMathematical ColumnsThe Modulo OperationThe ROUND() Function3Specific Return Format
Null valuesSort Results Part 1Sort Results Part 2Recap - Cyber Security FirmLimit number of recordsRecap - Vehicle Factory6Intro Challenges
Recap - Parliamentary ElectionRecap - Police Criminal ArrestRecap - Bar Beverage ContainerRecap - Engineer new columns