Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Códigos - Desafio BD Escola

Olá, prezadxs, boas!

Seguem abaixo os códigos do Desafio do curso "Realizando consultas com SQL - Joins, Views e Transações". Poderiam, por gentileza, dar o vosso feedback? Muito obrigado desde já!

**Consulta 1: Buscar o nome do professor e a turma que ele é orientador **

SELECT p.nome_professor, t.id_turma, t.nome_turma
FROM professores p
JOIN turmas t
ON p.id_professor = t.id_professor;

**Consulta 2: Retornar o nome e a nota do aluno que possui a melhor nota na disciplina de Matemática **

SELECT a.nome_aluno, MAX(n.valor_nota)
FROM alunos a
JOIN notas n
ON a.id_aluno = n.id_aluno
JOIN disciplinas d
ON n.id_disciplina = d.id_disciplina
WHERE d.nome_disciplina = 'Matemática';

**Consulta 3: Identificar o total de alunos por turma **

SELECT id_turma, COUNT(id_aluno) FROM turma_alunos
GROUP BY id_turma

**Consulta 4: Listar os Alunos e as disciplinas em que estão matriculados **

SELECT a.nome_aluno, d.nome_disciplina
FROM turma_alunos ta
JOIN turma_disciplinas td
ON ta.id_turma = td.id_turma
JOIN alunos a
ON a.id_aluno = ta.id_aluno
JOIN disciplinas d
ON d.id_disciplina = td.id_disciplina;

**Consulta 5: Criar uma view que apresenta o nome, a disciplina e a nota dos alunos **

CREATE VIEW View_Nome_Disc_Nota As
SELECT a.nome_aluno, d.nome_disciplina, n.valor_nota
FROM alunos a
JOIN notas n
ON a.id_aluno = n.id_aluno
JOIN disciplinas d
ON n.id_disciplina = d.id_disciplina;
2 respostas
solução!

Olá Vitor, tudo bem com você?

Meus parabéns pela resolução do exercício e por compartilhá-lo com a comunidade do fórum Alura. Analisando a sua query, notei apenas um ponto de atenção na segunda consulta, pois, ao usar a função MAX() para buscar a maior nota, a consulta pode não retornar o nome do aluno corretamente. Isso porque a função MAX() retorna o maior valor de uma coluna específica, mas não necessariamente a linha correspondente a esse valor. Uma alternativa seria a subconsulta abaixo:

SELECT a.nome_aluno, n.valor_nota
FROM alunos a
JOIN notas n
ON a.id_aluno = n.id_aluno
JOIN disciplinas d
ON n.id_disciplina = d.id_disciplina
WHERE d.nome_disciplina = 'Matemática' AND n.valor_nota = (
    SELECT MAX(valor_nota) FROM notas WHERE id_disciplina = d.id_disciplina
);

Conte com o apoio do Fórum na sua jornada. Espero ter ajudado. Fico à disposição. Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Olá, Rafael, boas!

Muito obrigado pelo feedback! Me ajudou bastante.

Ainda tenho dificuldades de entender quando é melhor fazer uma subconsulta. Principalmente quando se trata de funções de agregação (SUM, COUNT, MAX, MIN, AVG, etc).

Ou seja, tenho dificuldades de entender a ordem na qual o SGBD executa as funções e cláusulas dentro da consulta com subconsulta.

Mas, entendi que, nesse caso, essa subconsulta que você fez só funciona porque a consulta principal tem os JOINs com notas e disciplinas.

Enfim, vamos seguindo...rs

Abração!