Lição 6.1: Introdução às Subconsultas - Consultas Aninhadas e Inline Views
Nos módulos anteriores, aprendemos como recuperar dados de tabelas e uni-los. No entanto, às vezes uma única consulta não é suficiente para obter a resposta de que você precisa. Você pode precisar encontrar um valor primeiro (como uma média ou um ID específico) e depois usar esse valor em outra consulta. É aqui que entram as Subconsultas.
O que é uma Subconsulta?
Uma Subconsulta (ou Consulta Interna) é uma instrução SELECT aninhada dentro de outra instrução SQL. A consulta que contém a subconsulta é chamada de Consulta Externa (ou Consulta Principal).
As subconsultas são sempre colocadas entre parênteses ().
Lógica Central: Como elas funcionam
Normalmente, o banco de dados executa a Consulta Interna primeiro. O resultado dessa consulta interna é então passado para a Consulta Externa, que o utiliza para completar sua própria execução.
-- Exemplo Conceitual
SELECT column_name
FROM table_name
WHERE column_name = (SELECT value FROM another_table);
^------- Isso executa primeiro -------^
Categorias de Subconsultas
As subconsultas são frequentemente categorizadas pelo tipo de dados que retornam:
- Subconsulta Escalar: Retorna exatamente um valor (uma linha e uma coluna).
- Subconsulta de Múltiplas Linhas: Retorna uma lista de valores (uma coluna, várias linhas).
- Subconsulta de Tabela (Inline View): Retorna um conjunto de resultados inteiro (várias colunas e linhas) e é usada na cláusula
FROMcomo se fosse uma tabela temporária.
1. Subconsultas Aninhadas (Dentro de WHERE)
O uso mais comum de uma subconsulta é na cláusula WHERE para filtrar dados com base em um valor dinâmico.
Cenário: Encontrar filmes que tenham um custo de substituição superior à média do custo de substituição de todos os filmes.
SELECT
title,
replacement_cost
FROM
film
WHERE
replacement_cost > (SELECT AVG(replacement_cost) FROM film);
- Consulta Interna: Calcula o custo médio (US$ 19,98, por exemplo).
- Consulta Externa: Encontra todos os filmes onde o custo é superior aos US$ 19,98 calculados.
2. Inline Views (Dentro de FROM)
Quando você coloca uma subconsulta na cláusula FROM, ela é chamada de Inline View. Você está essencialmente criando uma tabela temporária "na hora" que existe apenas durante a execução dessa consulta.
Nota: Você deve dar um alias (apelido) a uma inline view.
Cenário: Obter uma lista de clientes ativos e uni-la aos seus dados de pagamento.
SELECT
active_cust.first_name,
p.amount
FROM
(SELECT * FROM customer WHERE active = 1) AS active_cust
INNER JOIN
payment AS p ON active_cust.customer_id = p.customer_id;
Nesse caso, a consulta externa une o resultado da subconsulta (active_cust) com a tabela payment.
Por que usar Subconsultas em vez de JOINs?
- Legibilidade: Às vezes, uma subconsulta é mais fácil de entender do que um join complexo.
- Agregação: As subconsultas são ótimas quando você precisa usar um valor agregado (como
AVGouMAX) para filtrar linhas individuais. - Lógica: Certas lógicas (como "Encontrar todos os X que NÃO existem em Y") podem ser expressas de forma muito limpa com subconsultas usando
NOT INouNOT EXISTS.
Principais Conclusões desta Lição
- Uma Subconsulta é uma instrução
SELECTdentro de outra consulta. - Subconsultas aninhadas são geralmente encontradas nas cláusulas
WHEREилиSELECT. - Inline Views são subconsultas usadas na cláusula
FROMe requerem um alias. - A Consulta Interna geralmente executa primeiro, fornecendo dados para a Consulta Externa.
- As subconsultas são sempre envolvidas em parênteses.