Aula 10: União de Dados, JOINs e Subconsultas
Na aula 10, vamos estudar União de Dados (UNION), Associação de Tabelas (JOIN) e Subconsultas. Esses tópicos são essenciais para manipular e combinar dados de várias tabelas, permitindo consultas mais complexas e detalhadas.
1. União de Dados com UNION
A cláusula UNION é usada para combinar os resultados de duas ou mais consultas SELECT
. É útil para unir dados de tabelas diferentes, desde que as colunas sejam compatíveis em número e tipo.
- Sintaxe Básica:
SELECT coluna1, coluna2 FROM tabela1 UNION SELECT coluna1, coluna2 FROM tabela2;
- Exemplo:
SELECT nome FROM clientes_brasil UNION SELECT nome FROM clientes_argentina;
Esse exemplo une clientes de duas tabelas diferentes (Brasil e Argentina) em uma única lista de nomes. - Dica: Para evitar duplicatas, o UNION elimina automaticamente registros duplicados. Use UNION ALL se quiser manter todos os registros, incluindo duplicados.
2. Associação de Tabelas com JOIN
Os JOINs permitem combinar registros de duas ou mais tabelas com base em uma coluna comum. Existem diferentes tipos de JOINs, cada um com um propósito específico.
2.1. Tipos de JOIN
JOIN | Descrição |
---|---|
INNER JOIN | Retorna apenas os registros que têm correspondências nas duas tabelas. |
LEFT JOIN | Retorna todos os registros da tabela à esquerda e os correspondentes da tabela à direita. Se não houver correspondência, retorna NULL para a tabela à direita. |
RIGHT JOIN | Retorna todos os registros da tabela à direita e os correspondentes da tabela à esquerda. Se não houver correspondência, retorna NULL para a tabela à esquerda. |
FULL JOIN | Retorna todos os registros quando há correspondência em uma das tabelas. |
Exemplos Práticos de JOINs
- INNER JOIN: Exibe produtos e seus pedidos somente se ambos existirem em
produtos
epedidos
.SELECT produtos.nome, pedidos.quantidade FROM produtos INNER JOIN pedidos ON produtos.id = pedidos.id_produto;
- LEFT JOIN: Exibe todos os produtos, mesmo se não houver pedidos.
SELECT produtos.nome, pedidos.quantidade FROM produtos LEFT JOIN pedidos ON produtos.id = pedidos.id_produto;
- RIGHT JOIN: Exibe todos os pedidos, mesmo que não haja produtos associados.
SELECT produtos.nome, pedidos.quantidade FROM produtos RIGHT JOIN pedidos ON produtos.id = pedidos.id_produto;
- FULL JOIN (Nem todos os SGBDs suportam): Retorna registros onde existam correspondências em qualquer uma das tabelas.
SELECT tabela1.coluna1, tabela2.coluna2 FROM tabela1 FULL JOIN tabela2 ON tabela1.id = tabela2.id;
3. Subconsultas
As subconsultas (ou consultas internas) são usadas para realizar uma consulta dentro de outra consulta. Elas são úteis para criar filtros e cálculos mais avançados.
Tipos de Subconsultas
- Subconsulta em WHERE:
SELECT nome FROM funcionarios WHERE salario > (SELECT AVG(salario) FROM funcionarios);
Esse exemplo retorna os funcionários que têm salário acima da média. - Subconsulta com IN/NOT IN:
SELECT nome FROM alunos WHERE id IN (SELECT id_aluno FROM aprovados);
Retorna nomes de alunos que estão na tabela de aprovados. - Subconsultas com ANY/ALL:
SELECT nome FROM produtos WHERE preco > ALL (SELECT preco FROM produtos WHERE categoria = 'eletrônicos');
Retorna produtos cujo preço é maior que todos os produtos da categoria “eletrônicos”. - EXISTS:
SELECT nome FROM clientes WHERE EXISTS (SELECT * FROM pedidos WHERE pedidos.id_cliente = clientes.id);
Verifica se o cliente fez pelo menos um pedido.
4. Exercícios Práticos
- UNION:
- Combine dados de duas tabelas
clientes_brasil
eclientes_portugal
, listando todos os clientes, sem duplicatas.
- Combine dados de duas tabelas
- INNER JOIN:
- Exiba uma lista de todos os pedidos com o nome do cliente e a quantidade de cada pedido.
- LEFT JOIN:
- Exiba todos os produtos e a quantidade total vendida, incluindo produtos que nunca foram vendidos.
- Subconsulta com IN:
- Liste todos os funcionários que trabalham em departamentos que possuem mais de 10 funcionários.
- Subconsulta com EXISTS:
- Mostre todos os clientes que já fizeram pelo menos um pedido no último mês.
5. Desafio Prático
Combine os conceitos de JOIN e Subconsultas:
- Exiba uma lista de clientes e o total de pedidos realizados por cada um, apenas para clientes que fizeram mais de 5 pedidos.
Publicar comentário