Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

🚀 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 com NULL.

📗 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 WHERE podem 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. 🛡️🚀