Como utilizar subconsultas correlacionadas no SQL?
Subconsultas correlacionadas são subconsultas que dependem de cada linha da consulta principal para serem executadas, tornando a busca mais dinâmica e personalizada.
Exemplo de subconsulta correlacionada
Se quisermos encontrar o pedido mais recente de cada cliente:
SELECT c.nome,
(SELECT MAX(p.data_pedido) FROM pedidos p WHERE p.cliente_id = c.id) AS ultimo_pedido
FROM clientes c;
Aqui, a subconsulta dentro do SELECT busca a data do pedido mais recente para cada cliente.
Usando subconsultas correlacionadas dentro do WHERE
Se quisermos listar apenas clientes cujo último pedido foi feito nos últimos 30 dias:
SELECT nome
FROM clientes c
WHERE EXISTS (
SELECT 1 FROM pedidos p
WHERE p.cliente_id = c.id
AND p.data_pedido >= CURDATE() - INTERVAL 30 DAY
);
Aqui, verificamos se o cliente tem um pedido recente antes de incluí-lo no resultado.
Quando usar subconsultas correlacionadas?
- Quando cada linha da consulta principal precisa de uma verificação individual.
- Quando um
JOIN
não for a melhor alternativa por performance ou estrutura dos dados. - Para buscar o último registro relacionado a cada item da consulta principal.
Cuidados ao usar subconsultas correlacionadas
- Podem ser lentas em tabelas grandes, pois são executadas para cada linha da consulta principal.
- Evite subconsultas dentro de SELECT se um JOIN puder resolver o problema.
- Utilize EXPLAIN para analisar a performance e verificar possíveis gargalos.
Quando utilizar subconsultas correlacionadas no SQL?
As subconsultas correlacionadas no SQL são ferramentas poderosas para criar consultas altamente personalizadas. Elas permitem, por exemplo, buscar o pedido mais recente de cada cliente, identificar os produtos mais vendidos por categoria ou até mesmo verificar se um usuário realizou uma ação específica dentro de um período. No entanto, devido ao seu impacto na performance, é essencial utilizá-las com cautela, especialmente em grandes volumes de dados.
Algumas aplicações:
- Encontrar o pedido mais recente de cada cliente
- Listar os produtos mais vendidos por categoria
- Identificar o último acesso de um usuário
- Filtrar registros que possuem relações dinâmicas
- Selecionar funcionários com o maior salário por departamento
Dicas para quem está começando
- Use subconsultas correlacionadas apenas quando necessário
- Se a consulta estiver lenta, tente reescrevê-la usando JOINs
- Teste a subconsulta separadamente antes de integrá-la à consulta principal
- Utilize índices nas colunas utilizadas para melhorar a performance
- Evite subconsultas correlacionadas em tabelas muito grandes
Contribuições de Fernando Albuquerque