Se preferir consumir por vídeo antes da leitura, este é o ponto de entrada mais rápido.
Vídeo
Conteúdo principal
Leitura pensada para estudo, consulta e revisão. Use a navegação lateral para alternar entre etapas da aula.
Estudo
Conteúdo interativo — HTML importado
Aula 05 — SELECT Avançado: Agregação e JOIN
Abra o material em tela cheia para estudar com conforto, sem sair da disciplina.
Aula 05 — SELECT Avançado: Agregação e JOIN
100%
Carregando conteúdo interativo...
Aula 5 — SELECT Avançado: Agregação e JOIN ◀ ▶ 1 / 0 ⛶ Tela cheia A5 ◆ Banco de Dados · Aula 5 SELECT avançado — Agregação e JOIN Aprofunde a consulta de dados com funções agregadas, agrupamento, filtros em grupos e a união de tabelas por meio de JOINs relacionais. Agregação JOINs e GROUP BY ~2 horas Exemplos práticos SELECT GROUP BY HAVING JOIN 01 01 · Visão Geral SELECT além do básico 🚀 Quando usar SELECT avançado entra em cena quando você precisa responder perguntas que vão além de colunas simples: totais, médias, agrupamentos e relacionamentos entre tabelas. Objetivo Aprender a calcular valores agregados e combinar tabelas para consultar dados distribuídos em mais de uma entidade. Resultados esperados Contar registros com COUNT() Somar, tirar média e encontrar valores máximos/minimos Agrupar resultados com GROUP BY Filtrar grupos com HAVING Unir tabelas com JOIN Resumo rápido 💡 SELECT normal retorna linhas individuais. Com agregação e JOIN, você constrói relatórios, resumos e análise de dados em um único comando. Agregação Funções que retornam um único valor a partir de várias linhas. JOIN Combina dados de tabelas diferentes usando chaves relacionadas. 02 02 · Agregação Funções agregadas 📊 O que elas fazem Funções agregadas resumem várias linhas em um único valor: contar, somar, média, mínimo e máximo. agregacao.sqlSQL📋 -- Contar alunos SELECT COUNT(*) AS total_alunos FROM aluno; -- Somar valores SELECT SUM(preco) AS total_venda FROM produto; -- Média de preço SELECT AVG(preco) AS preco_medio FROM produto; -- Menor / maior SELECT MIN(preco) AS menor_preco, MAX(preco) AS maior_preco FROM produto; 💡 Não confunda Funções agregadas retornam um valor por conjunto de linhas. Para obter detalhes linha a linha, use SELECT simples sem agregação ou com GROUP BY. Quando usar Contagem Quantos alunos, pedidos ou produtos existem. Soma Total de vendas, receita ou valores numéricos de um conjunto. Média Média de preços, notas ou qualquer métrica numérica. 03 03 · GROUP BY Agrupar resultados 🧩 O papel do GROUP BY Ele divide as linhas em grupos com base nas colunas escolhidas e calcula agregados para cada grupo. group_by.sqlSQL📋 -- Quantos alunos por curso SELECT id_curso, COUNT(*) AS alunos_por_curso FROM aluno GROUP BY id_curso; -- Média de preço por categoria SELECT id_categoria, AVG(preco) AS media_preco FROM produto GROUP BY id_categoria; 📌 Regra importante Toda coluna no SELECT que não é agregada deve aparecer no GROUP BY. Caso contrário, o SQL pode falhar ou retornar resultados indeterminados. Como pensar Grupo = linha de resumo Cada grupo vira uma linha no resultado, como "curso 1" com total de alunos. Agrupar + agregar O GROUP BY é útil para relatórios e dashboards, não para exibir linhas individuais. 04 04 · HAVING HAVING — Filtrar grupos 🔎 Quando usar HAVING Use HAVING para filtrar o resultado após o agrupamento — por exemplo, cursos com mais de 3 alunos. having.sqlSQL📋 -- Cursos com pelo menos 2 alunos SELECT id_curso, COUNT(*) AS alunos FROM aluno GROUP BY id_curso HAVING COUNT(*) >= 2; -- Média de preço por categoria apenas se houver 5 produtos SELECT id_categoria, AVG(preco) AS media_preco FROM produto GROUP BY id_categoria HAVING COUNT(*) >= 5; ⚠️ Importante WHERE filtra linhas antes do GROUP BY; HAVING filtra grupos depois do GROUP BY. Comparação rápida WHERE Filtra registros individuais antes do agrupamento. HAVING Filtra grupos após a agregação. 05 05 · JOIN Unindo tabelas 🔗 O que é JOIN JOIN combina linhas de duas ou mais tabelas usando colunas relacionadas, como chave primária e estrangeira. join_basico.sqlSQL📋 -- INNER JOIN: só pares que batem em ambas tabelas SELECT a.nome, c.nome AS curso FROM aluno AS a INNER JOIN curso AS c ON a.id_curso = c.id; -- LEFT JOIN: todos os alunos, mesmo sem curso SELECT a.nome, c.nome AS curso FROM aluno AS a LEFT JOIN curso AS c ON a.id_curso = c.id; 💡 Atente-se Use aliases (AS) para deixar a consulta mais legível quando fizer JOIN com várias tabelas. Tipos principais INNER JOIN Retorna apenas os registros que existem em ambas as tabelas. LEFT JOIN Retorna todas as linhas da tabela à esquerda, mesmo que não haja correspondência à direita. 06 06 · JOIN prático JOIN aplicado ao banco escola 🏫 Tabelas relacionadas Usamos aluno e curso para mostrar como dados divididos em tabelas se juntam em uma única consulta. join_escola.sqlSQL📋 -- Nome do aluno e curso SELECT a.nome AS aluno, c.nome AS curso FROM aluno AS a INNER JOIN curso AS c ON a.id_curso = c.id; -- Listar todos os alunos, mesmo sem curso SELECT a.nome AS aluno, c.nome AS curso FROM aluno AS a LEFT JOIN curso AS c ON a.id_curso = c.id; Resultado esperado Exemplo — saída de INNER JOIN aluno curso Ana Lima Informática Carlos Melo Engenharia Maria Silva Informática João Souza Design 07 07 · SELECT Avançado Agravando com JOIN e GROUP BY 📈 Relatórios combinados JOIN e GROUP BY juntos permitem calcular métricas por categoria, curso ou qualquer relação entre tabelas. join_groupby.sqlSQL📋 -- Quantos alunos por curso SELECT c.nome AS curso, COUNT(a.id) AS alunos FROM curso AS c LEFT JOIN aluno AS a ON a.id_curso = c.id GROUP BY c.nome; -- Cursos com 2 ou mais alunos SELECT c.nome, COUNT(a.id) AS alunos FROM curso AS c LEFT JOIN aluno AS a ON a.id_curso = c.id GROUP BY c.nome HAVING COUNT(a.id) >= 2; Visualização Exemplo de relatórios por curso curso alunos Informática 2 Engenharia 1 Design 1 ✅ Use no dia a dia Essa combinação é comum em relatórios de vendas, estoque por categoria, comparaçõess de desempenho e dashboards analíticos. 08 08 · Exercícios Pratique com SELECT avançado 🎯 Como resolver Use o banco escola e as tabelas aluno, curso, produto e categoria nas consultas. 01 Conte quantos alunos existem no total usando COUNT. FÁCIL ▼ 💡 Use SELECT COUNT(*) AS total_alunos FROM aluno. Solução📋 SELECT COUNT(*) AS total_alunos FROM aluno; 💡 Ver dica 02 Calcule a média de preço dos produtos e ordene pelo valor médio. MÉDIO ▼ 💡 Use SELECT AVG(preco) AS preco_medio FROM produto. Solução📋 SELECT AVG(preco) AS preco_medio FROM produto ORDER BY preco_medio ASC; 💡 Ver dica 03 Liste cada curso e a quantidade de alunos matriculados com GROUP BY. MÉDIO ▼ 💡 Use GROUP BY id_curso e COUNT(*) para agrupar alunos por curso. Solução📋 SELECT id_curso, COUNT(*) AS alunos FROM aluno GROUP BY id_curso; 💡 Ver dica 04 Use JOIN para mostrar o nome do aluno e o nome do curso juntos. DESAFIO ▼ 💡 Faça INNER JOIN entre aluno e curso usando a.id_curso = c.id. Solução📋 SELECT a.nome AS aluno, c.nome AS curso FROM aluno AS a INNER JOIN curso AS c ON a.id_curso = c.id; 💡 Ver dica 09 FIM · Resumo Resumo da Aula 5 01 COUNT, SUM, AVG e outras funções agregadas resumem várias linhas em um valor. 02 GROUP BY agrupa os dados e gera uma linha resumida para cada conjunto de valores. 03 HAVING filtra grupos depois de aplicados os agregados, ao contrário do WHERE. 04 JOIN permite consultar tabelas relacionadas em um único SELECT. 05 Combine JOIN com GROUP BY para criar relatórios como "alunos por curso" ou "vendas por categoria". Próxima aula Aula 6 — Subconsultas e CTEs Forte no uso de SELECT para consultas complexas e reutilizáveis.
Arquivos desta aula
Material complementar para ampliar o estudo ou reutilizar como referência prática.