🚀 SUBQUERIES E JOINS AVANÇADOS
Neste capítulo, uniremos os recursos que permitem análises complexas através da combinação de tabelas e aninhamento de instruções. 🛡️🧩
Objetivo: Compreender a estrutura de consultas aninhadas (Subqueries), dominar a arquitetura de junções (JOINs) e aplicar filtros de agrupamento (HAVING) para inteligência de dados.
📗 PASSO 1: Consultas Aninhadas (Subqueries)
Uma Subquery é um SELECT dentro de outro. Elas calculam resultados temporários antes da consulta principal. 🛡️
🔄 Fluxo de Processamento (Escalar)
flowchart LR
S[🔍 Subquery Interna] --> |"1. Executa Primeiro"| R[📄 Resultado Único]
R --> |"2. Passa Valor"| M[⚙️ Query Principal]
M --> |"3. Filtra"| F[✅ Resultado Final]
🎯 Tipos de Subqueries
- Não Correlacionada: A consulta interna independe da externa.
- Correlacionada (
EXISTS): A interna depende de valores da externa.
-- Buscar contatos que possuem pelo menos um telefone
SELECT NOME
FROM CONTATO C
WHERE EXISTS (
SELECT 1
FROM TELEFONE T
WHERE T.CONTATO_ID = C.ID
);
📗 PASSO 2: Arquitetura de JOINs
Os JOINs permitem "colar" tabelas baseadas em chaves comuns. 🛡️
📊 Diagrama de Junções Profissionais
flowchart TD
subgraph INNER [🤝 INNER JOIN]
direction LR
A1((A)) --- B1((B))
end
subgraph LEFT [⬅️ LEFT JOIN]
direction LR
A2((A)) --- B2((B))
end
🛠️ Comportamento Técnico:
INNER JOIN: Foco na intersecção. Se não há par, desaparece.LEFT JOIN: Foco na tabela esquerda. Se não há par, preenche comNULL.
📗 PASSO 3: Pipeline de Execução (SQL Order)
📊 O Segredo do Motor SQL
flowchart LR
F[1. FROM] --> W[2. WHERE]
W --> G[3. GROUP BY]
G --> H[4. HAVING]
H --> S[5. SELECT]
S --> O[6. ORDER BY]
🧐 WHERE vs HAVING
WHERE: Filtra as linhas individuais (Pré-agrupamento).HAVING: Filtra os resultados agregados (Pós-agrupamento).
SELECT SOBRENOME, AVG(PESO) AS MEDIA
FROM CONTATO
WHERE ATIVO = TRUE
GROUP BY SOBRENOME
HAVING AVG(PESO) > 80;
💡 Insight Profissional: Subqueries em cláusulas
WHEREpodem ser lentas em bases gigantes. Sempre que possível, converta-as em JOIN, pois os SGBDs modernos são otimizados para junções físicas. 🛡️🚀