Como fazer uma subconsulta dentro de um FROM?
Uma subconsulta dentro do FROM é usada para criar uma tabela temporária no momento da execução da consulta principal. Isso permite manipular os dados antes de combiná-los com outras tabelas.
Criando uma tabela temporária dentro do FROM
Se quisermos calcular a média de preços de cada categoria e depois buscar produtos que tenham um preço acima da média de sua própria categoria, podemos fazer:
SELECT p.nome, p.preco, temp.media_preco
FROM produtos p
JOIN (
SELECT categoria, AVG(preco) AS media_preco
FROM produtos
GROUP BY categoria
) AS temp ON p.categoria = temp.categoria
WHERE p.preco > temp.media_preco;
Aqui, criamos uma subconsulta dentro do FROM (temp
) que calcula a média de preços por categoria e depois usamos essa tabela temporária para filtrar os produtos mais caros.
Usando subconsulta dentro de FROM para contar pedidos por cliente
SELECT c.nome, pedidos_por_cliente.total_pedidos
FROM clientes c
JOIN (
SELECT cliente_id, COUNT(*) AS total_pedidos
FROM pedidos
GROUP BY cliente_id
) AS pedidos_por_cliente ON c.id = pedidos_por_cliente.cliente_id;
Essa consulta conta os pedidos por cliente em uma subconsulta e depois junta o resultado com a tabela de clientes.
Quando usar subconsultas dentro do FROM?
- Quando precisamos calcular valores agregados antes da consulta principal.
- Quando queremos criar uma tabela temporária sem precisar criar uma
VIEW
ouTABLE
permanente. - Quando um
JOIN
direto seria muito complexo ou afetaria a legibilidade da consulta.
Cuidados ao usar subconsultas dentro do FROM
- Evite usar subconsultas dentro de FROM para grandes volumes de dados, pois podem afetar o desempenho.
- Nomeie a subconsulta com um alias para evitar erros de sintaxe.
- Considere criar uma VIEW se a subconsulta for usada frequentemente, pois pode otimizar a execução.
Quando utilizar subconsultas dentro do FROM no SQL?
Subconsultas dentro do FROM são uma poderosa técnica do SQL para manipular dados de forma eficiente sem alterar tabelas permanentes. Elas são frequentemente usadas para criar tabelas temporárias no momento da execução da consulta, permitindo cálculos intermediários antes da consulta principal. Em sistemas de relatórios, podemos usá-las para calcular totais antes de gerar um resultado final, tornando a análise de dados mais organizada e eficiente.
Algumas aplicações:
- Calcular médias ou totais antes de executar a consulta principal
- Criar tabelas temporárias sem precisar criar uma VIEW
- Facilitar a leitura de consultas complexas
- Segmentar dados para relatórios e análises detalhadas
- Evitar junções muito pesadas quando os dados precisam ser agregados primeiro
Dicas para quem está começando
- Sempre dê um alias à subconsulta para evitar erros
- Se a subconsulta for muito utilizada, considere criar uma VIEW para otimizar
- Teste a subconsulta separadamente antes de usá-la no FROM
- Evite usar subconsultas dentro de FROM em bases de dados muito grandes
- Se precisar filtrar os resultados finais, utilize WHERE na consulta principal
Contribuições de Fernando Albuquerque