UNION
Parte da seção Fundamentos do Journey de SQL da Coddy. Lição 48 de 72.
As uniões são diferentes das junções. As junções usam condições para combinar tabelas, mas as uniões apenas adicionam uma tabela sobre a outra. Para usar UNION, escreveremos:
SELECT col1, col2, ... FROM table1
UNION
SELECT col1, col2, ... FROM table2Ambos os comandos SELECT devem obedecer às seguintes regras:
- O número de campos deve ser igual
- A ordem é importante
- As colunas no mesmo lugar devem corresponder aos tipos de dados
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 grande tabela 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 em uma subconsulta e, em seguida, aplicar agrupamento e ordenação sobre ela.
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:
sales_2009:product_id,quantity_soldsales_2010:product_id,quantity_soldsales_2011:product_id,quantity_sold
Há 3 tabelas de vendas.
Encontre a soma das vendas de cada produto de todas as tabelas em conjunto.
O resultado deve incluir o product_id e o total de vendas.
Dê a esta coluna o nome 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
4Mais palavras-chave
A palavra-chave INA palavra-chave BETWEENA palavra-chave LIKEA palavra-chave ASRecapitulação - Modelos de celulares2Condições
Noções básicas de condiçõesA palavra-chave ANDA palavra-chave ORA palavra-chave NOTCombinação de várias condiçõesParêntesesBooleanos3Formato de retorno específico
Valores nulosOrdenar resultados - Parte 1Ordenar resultados - Parte 2Recapitulação - Empresa de segurança cibernéticaLimitar o número de registrosRecapitulação - Fábrica de veículos6Desafios introdutórios
Revisão - Eleição parlamentarRevisão - Prisão criminal pela políciaRevisão - Recipiente de bebidas de barRevisão - Projetar novas colunasPratique por conta própria: Playground de SQL