Uma subconsulta, também conhecida como subquery, é uma consulta SQL inserida dentro de outra consulta.
Ela permite utilizar o resultado de uma consulta como informação para executar outra consulta.
SELECT coluna
FROM tabela
WHERE coluna OPERADOR
(
SELECT coluna
FROM tabela
);
FUNCIONARIOS
+----+----------+---------+
| ID | Nome | Salário |
+----+----------+---------+
| 1 | Ana | 3000 |
| 2 | Carlos | 5000 |
| 3 | Pedro | 7000 |
+----+----------+---------+
Encontrar funcionários que recebem acima da média salarial.
SELECT nome, salario
FROM funcionarios
WHERE salario >
(
SELECT AVG(salario)
FROM funcionarios
);
Carlos | 5000
Pedro | 7000
A subconsulta calcula a média e a consulta principal faz o filtro.
| Tipo | Descrição |
|---|---|
| Subconsulta no SELECT | Retorna um valor calculado |
| Subconsulta no FROM | Cria uma tabela temporária |
| Subconsulta no WHERE | Filtra registros |
| Subconsulta no HAVING | Filtra agrupamentos |
SELECT nome
FROM clientes
WHERE id IN
(
SELECT cliente_id
FROM pedidos
);
Retorna clientes que possuem pedidos.
SELECT nome
FROM clientes c
WHERE EXISTS
(
SELECT *
FROM pedidos p
WHERE p.cliente_id = c.id
);
Verifica se existe relacionamento antes de retornar o registro.
| Subconsulta | JOIN |
|---|---|
| Consulta dentro de consulta | Relaciona tabelas diretamente |
| Pode facilitar algumas análises | Geralmente possui melhor desempenho |
| Mais simples em alguns casos | Mais usado em grandes consultas |
| Sistema | Exemplo |
|---|---|
| Financeiro | Encontrar valores acima da média |
| E-commerce | Clientes que realizaram compras |
| RH | Funcionários acima do salário médio |
| Relatórios | Comparações e análises |
| Erro | Problema |
|---|---|
| Retornar vários valores com = | Erro de comparação |
| Subconsulta muito complexa | Baixo desempenho |
| Não utilizar índices | Consultas lentas |
| Substituir JOIN sem necessidade | Código menos eficiente |