Identificação
Resumo
A aula 4 fecha o bloco de banco com o aprendizado mais característico do modelo relacional: JOINs. Abordamos os tipos clássicos (INNER, LEFT, RIGHT, FULL), agregações (GROUP BY, HAVING, funções como COUNT, SUM, AVG), modelagem de relações N:N com tabela de junção e subconsultas.
O fechamento traz a leitura de EXPLAIN como ferramenta para entender performance — preparando a equipe para escrever todos os relatórios analíticos do projeto à tarde.
Objetivos de aprendizagem
- OA-1Diferenciar os tipos de
JOIN(INNER,LEFT,RIGHT,FULL) e prever quais linhas aparecem no resultado. - OA-2Compor consultas com
JOIN+WHEREresolvendo perguntas de negócio reais. - OA-3Agregar dados com
GROUP BY,HAVINGe funções de agregação. - OA-4Modelar relações N:N com tabela de junção e consultar via duplo
JOIN. - OA-5Escrever subconsultas em
WHERE,FROMeSELECT. - OA-6Ler a saída de
EXPLAINe identificar gargalos básicos.
Pré-requisitos
- Aula 3 concluída: CRUD completo do minimundo no banco da equipe.
- Massa de teste com pedidos contendo múltiplos produtos (para os JOINs renderem resultados úteis).
- Tabela de junção identificada no DER (caso o minimundo tenha relação N:N).
Cronograma do dia
📚 Bloco 1 · Autoestudo
08h00 — 10h00Estudo individual orientado pelo material da aula 4.
- Leitura completa do Material da Aula 4 (JOINs, agregações, subconsultas).
- Listar 3 relatórios de negócio do minimundo que exigem unir tabelas (ex.: total vendido por usuário no mês).
- Validar que existe massa de teste suficiente para os relatórios.
- Caderno de bordo: anotar dúvidas sobre cardinalidade dos resultados.
🎓 Bloco 2 · Instrução PE — Aula em metodologia ativa
10h00 — 12h00Encontro síncrono com o professor especialista. 15 minutos de daily seguidos de 1h45 de aula.
- 10h00 — 10h15 · Daily: relatórios trazidos do autoestudo.
- 10h15 — 12h00 · Tipos de JOIN, laboratório, agregação, subconsultas e
EXPLAIN.
🍴 Intervalo · Almoço
12h00 — 14h00Janela livre.
🛠️ Bloco 3 · Desenvolvimento do projeto
14h00 — 16h00Janela de trabalho da equipe sobre o projeto integrador.
- Escrever em
db/relatorios.sqlas 5 consultas analíticas mais relevantes do minimundo. - Cada consulta deve ter pelo menos 1
JOIN, e ao menos 2 devem usar agregação. - Rodar
EXPLAINnas 2 consultas mais pesadas e registrar conclusões emdocs/banco/performance.md. - Abrir Merge Request
feat(db): relatórios e joinscom evidência de execução.
Detalhamento da instrução PE (10h00 — 12h00)
10h15
DailyDaily de abertura
Cada aluno apresenta, em 1 minuto, um relatório do minimundo que precisa de JOIN para existir.
10h35
AtivaTipos de JOIN — exercício visual
O professor mostra dois conjuntos de linhas em quadro. Em pares, os alunos preenchem o resultado esperado de INNER, LEFT, RIGHT e FULL antes de qualquer SQL ser escrito. Conferência coletiva.
10h55
CodingINNER e LEFT na prática
Em pares: escrever SELECT com INNER JOIN e depois LEFT JOIN sobre a mesma pergunta. A turma debate quando cada um faz sentido (clientes ativos vs. todos os clientes).
11h20
AtivaDesafio de agregação · GROUP BY + HAVING
Cada equipe recebe uma pergunta agregada (ex.: "produtos com mais de 10 vendas") e escreve a query. Três equipes apresentam — debate sobre o erro clássico de filtrar grupo no WHERE.
11h40
TalkRelação N:N e subconsultas
Apresentação da tabela de junção como ponte entre duas entidades de cardinalidade muitos-muitos. Demo de subconsulta correlacionada e subconsulta no FROM.
11h55
CodingEXPLAIN — o plano por trás da query
O professor roda EXPLAIN em uma query lenta, lê o resultado em voz alta e introduz o índice como solução. Em duplas, alunos repetem na própria base.
12h00
AtivaSíntese
Cada aluno escreve "a aula 4 me ensinou que...". O professor anuncia a entrega da tarde: 5 consultas analíticas + análise de performance.
Estratégias de metodologia ativa
- Predição antes da execução — alunos escrevem o resultado esperado do JOIN antes de rodar a query, reforçando o modelo mental.
- Aprendizagem por relatório real — cada query nasce de uma pergunta de negócio do minimundo, não de exercício abstrato.
- Diagnóstico em pares — ler
EXPLAINem conjunto, debatendo trade-offs antes de criar índice.
Recursos e ferramentas
| Categoria | Recurso | Uso |
|---|---|---|
| Slides | slides/slide-lesson-4.html | Exposição na instrução PE |
| Material | materials/lesson-4-material.html | Autoestudo |
| Cliente SQL | psql ou DBeaver | Execução e EXPLAIN |
| Repositório | db/relatorios.sql | 5 consultas analíticas |
| Documentação | docs/banco/performance.md | Análise de EXPLAIN |
Verificação de aprendizagem
- CR-1Apresentou na daily um relatório do minimundo viável apenas com JOIN.
- CR-2Previu corretamente, em par, a saída de
INNERvs.LEFTantes da execução. - CR-3Resolveu a pergunta agregada com
GROUP BY+HAVINGsem confundir comWHERE. - CR-4Leu uma saída de
EXPLAINe identificou ao menos um ponto de atenção. - CR-5Abriu Merge Request
feat(db): relatórios e joinscom 5 consultas + análise de performance até as 16h00.
Aluno que sair às 16h sem ao menos 3 relatórios funcionais com JOIN está em débito técnico para o início do back-end.
Conexão com a aula 5
A aula 5 abre o bloco de back-end: as queries escritas nas aulas 2–4 deixarão o cliente SQL e passarão a viver dentro de Models do Node.js + Express.
- O
db/queries.sqle odb/relatorios.sqlserão a fonte das primeiras funções dos Models. - O esquema do banco está congelado a partir daqui (alterações exigem migração documentada).
Antes das 8h do próximo dia: instalar Node.js LTS, ler o material da aula 5 e listar 3 endpoints HTTP que você imagina existir no projeto.