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

[Projeto] Resolução do desafio - Aluno com maior nota

Resolvi ir um pouco além: criar do zero as tabelas, popular com alguns dados e fazer o proposto no desafio.

Criação das tabelas:

create TABLE aluno (
  ID_aluno TEXT PRIMARY KEY,
  nome VARCHAR(255),
  curso VARCHAR(100)
)
  

  CREATE TABLE notas (
  ID_nota TEXT PRIMARY KEY,
  id_aluno TEXT,
  nota DECIMAL (2,2),
  
  FOREIGN KEY (id_aluno) REFERENCES aluno(id_aluno)
);

Populando tabelas com dados fictícios:

INSERT into aluno (id_aluno,nome,curso) VALUES
  (1,'Carlos Silva','Química'),
  (2, 'Marta Sousa', 'Enfermagem'), 
  (3, 'Pedro Almeida', 'Informática'),
  (4, 'Sofia Rodrigues', 'Química'),
  (5, 'João Pereira', 'Enfermagem'),
  (6, 'Inês Lima', 'Informática'),
  (7, 'Antonio Artur', 'Química') 
  ;  
  
  INSERT into notas (id_nota,id_aluno,nota) VALUES
  (1,'1','9'),
  (2, '7', '2'), 
  (3, '3', '8'),
  (4, '5', '6'),
  (5, '2', '5'),
  (6, '6', '10'),
  (7, '4', '8')
  

Consulta da maior nota trazendo como resposta nome e curso do aluno:

  SELECT nome, curso 
  FROM aluno
  where id_aluno = (
    SELECT id_aluno
    FROM notas
    WHERE nota=(
      SELECT MAX(nota)
      FROM notas))
3 respostas

Boa noite, Érica!

Parabéns pelo seu empenho! A criação das tabelas e a inserção dos dados fictícios estão muito bem feitas. A consulta SQL que você elaborou para encontrar o aluno com a maior nota também está correta e eficiente. Ótimo exemplo de como integrar dados relacionados e fazer consultas complexas.

Curiosidade: Você sabia que ao usar subconsultas como SELECT MAX(nota) FROM notas dentro de outra consulta, você está utilizando o que chamamos de nested query? Isso permite a realização de operações avançadas de filtragem e agregação dentro do SQL.

Conte com o apoio do Fórum na sua jornada. Abraços e bons estudos!

Obrigada pelo feedback, Rafael!

Ainda acho um tanto desafiador usar as queries aninhadas, normalmente eu tento fazer uma engenharia reversa pra conseguir montar tudo. Mas no geral, existe alguma outra técnica pra facilitar o uso das queries aninhadas?

solução!

Boa noite, Érika!

Concordo com você, consultas aninhadas são desafiadoras.Mas, já te adianto que não tenho uma fórmula mágica hehehe

Porém, vou deixar algumas dicas que podem fazer a diferença:

  • Dividir em Passos: Dividir a consulta em passos menores, resolvendo cada parte separadamente e depois combinando-as gradualmente. Exemplo:

    -- Passo 1: Selecionar a maior nota
    SELECT MAX(nota) FROM notas;
    
    -- Passo 2: Encontrar o aluno com a maior nota
    SELECT aluno_id FROM notas WHERE nota = (SELECT MAX(nota) FROM notas);
    
  • Utilizar Views: Criar views para consultas complexas pode simplificar consultas aninhadas, permitindo que partes do código sejam reutilizadas. Uma view nada mais é do que uma consulta SQL armazenada e nomeada, que pode ser tratada como uma tabela para uso posterior. Exemplo:

    CREATE VIEW MaxNota AS 
    SELECT MAX(nota) AS max_nota FROM notas;
    
    SELECT aluno_id FROM notas WHERE nota = (SELECT max_nota FROM MaxNota);
    
  • Praticar Regularmente: Fazer exercícios sobre o assunto de consultas aninhadas pode te ajudar a adquirir mais segurança.

Uma estratégia simples para evitar consultas aninhadas é usar JOINs. Em vez de usar subconsultas dentro da cláusula WHERE, você pode usar JOINs para combinar múltiplas tabelas e realizar filtros de forma mais explícita. Isso geralmente torna o código mais fácil de entender e manter. Mas, fique em paz, conforme os estudos e a prática todos esses conceitos ficarão cada vez mais claros.

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

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