Como utilizar subconsultas correlacionadas no SQL?

Subconsultas correlacionadas no SQL são consultas dependentes da linha atual da consulta principal, permitindo análises mais dinâmicas.

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.

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

Compartilhe este tutorial: Como utilizar subconsultas correlacionadas no SQL?

Compartilhe este tutorial

Continue aprendendo:

Como verificar se um registro existe em uma subconsulta?

Podemos verificar se um registro existe em uma subconsulta no SQL utilizando EXISTS ou IN para realizar filtros dinâmicos e eficientes.

Tutorial anterior

Como fazer uma consulta que retorna apenas o primeiro registro de cada grupo?

Podemos retornar apenas o primeiro registro de cada grupo no SQL utilizando técnicas como GROUP BY, ROW_NUMBER e subconsultas.

Próximo tutorial