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 uma tabela em cima da outra. Para usar UNION, nós escrevemos:
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 ter tipos de dados compatíveis
Por exemplo, vamos supor que temos as seguintes tabelas:
germany_people
| id | name |
| 1 | Lena |
| 2 | Leonie |
england_people
| id | name |
| 1 | George |
| 2 | Lena |
Problema: Queremos criar uma tabela grande com todos os nomes que temos.
SELECT name from germany_people
UNION
SELECT name from england_peopleResultado:
| name |
| 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:
| name |
| 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 subconsulta e, em seguida, aplicar o agrupamento e a ordenação sobre ele.
Por exemplo, suponha que queremos 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 DESCResultado:
| name | total_count |
| Lena | 2 |
| Leonie | 1 |
| George | 1 |
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 combina todas as linhas e, em seguida, GROUP BY + COUNT as resumem. ORDER BY ordena o resultado final.
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 como total_sales.
Ordene os resultados pelo total de vendas em ordem decrescente.
Experimente você mesmo
-- Empilhe as três tabelas em um único resultado, mantendo todas as linhas
SELECT product_id, ____ AS total_sales
FROM (
SELECT * FROM sales_2009
____
SELECT * FROM sales_2010
____
SELECT * FROM sales_2011
)
-- Uma linha por produto, maior total primeiro
GROUP BY ____
ORDER BY ____ DESC;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 columnsPratique por conta própria: Playground de SQL