Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — CESPE / CEBRASPE 2024

Banco de DadosConsultas e Comandos em SQL
Código
ce403672
Banca
CESPE / CEBRASPE
Órgão
TSE
Ano
2024
Cargo
TJ

Em determinada faculdade, para controlar os dados das monitorias prestadas por alunos a seus colegas, foram criadas as tabelas Aluno, Disciplina e Monitoria por meio dos scripts SQL a seguir.


CREATE TABLE Aluno (
matricula integer,
nome varchar(50),
cpf integer,
PRIMARY KEY(matricula)
);


CREATE TABLE Disciplina (
cod_disciplina integer,
nome_disciplina varchar(50),
PRIMARY KEY(cod_disciplina)
);


CREATE TABLE Monitoria (
cod_monitoria integer,
dia_da_semana char(20),
numero_de_horas integer,
matricula_aluno_atendido integer,
matricula_aluno_monitor integer,
cod_disciplina_apoiada integer,
PRIMARY KEY(cod_monitoria),
FOREIGN KEY (matricula_aluno_atendido) REFERENCES
Aluno (matricula),
FOREIGN KEY (matricula_aluno_monitor) REFERENCES
Aluno (matricula),
FOREIGN KEY (cod_disciplina_apoiada) REFERENCES
Disciplina (cod_disciplina)
);


A partir dessas informações, julgue o próximo item.


O comando SQL a seguir é capaz de listar pelo nome apenas o Aluno apoiado pela Monitoria, seguido pelo número de horas de atendimento, sendo a lista dada em ordem decrescente do número de horas e apresentada com pelo menos um registro na tabela Monitoria.

 

SELECT a.nome, m.numero_de_horas AS
nr_horas_atendimento FROM Aluno a LEFT OUTER
JOIN Monitoria m ON a.matricula =
m.matricula_aluno_atendido order by 2 desc;

  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoE — Errado

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

SQL – Junção LEFT OUTER JOIN e Ordenação

Gabarito: Errado. O comando SQL apresentado não é capaz de listar apenas o Aluno apoiado pela Monitoria, pois o uso de LEFT OUTER JOIN faz com que todos os alunos da tabela Aluno sejam retornados, mesmo aqueles que não possuem registro correspondente na tabela Monitoria. Para atender ao requisito de "apresentada com pelo menos um registro na tabela Monitoria", seria necessário um INNER JOIN (ou JOIN), que retorna apenas os registros com correspondência nas duas tabelas.

O comando SELECT é a instrução fundamental para consultas em SQL, permitindo recuperar dados de uma ou mais tabelas. A cláusula FROM indica a tabela de origem, e a cláusula JOIN combina linhas de duas tabelas com base em uma condição de igualdade entre colunas. Existem vários tipos de junção, e a escolha entre eles determina quais registros aparecem no resultado.

O LEFT OUTER JOIN (ou simplesmente LEFT JOIN) retorna todos os registros da tabela à esquerda (a primeira tabela mencionada no FROM), mesmo que não haja correspondência na tabela à direita. Quando não há correspondência, as colunas da tabela à direita são preenchidas com NULL. Já o INNER JOIN retorna apenas os registros que possuem correspondência em ambas as tabelas, descartando aqueles sem par.

No contexto da questão, a tabela Aluno é a tabela à esquerda, e a tabela Monitoria é a tabela à direita. O LEFT OUTER JOIN na condição ON a.matricula = m.matricula_aluno_atendido retornará todos os alunos, inclusive aqueles que nunca foram atendidos em uma monitoria. Para esses alunos, o valor de m.numero_de_horas será NULL. Portanto, a consulta não atende ao requisito de "apresentada com pelo menos um registro na tabela Monitoria", pois incluirá alunos sem monitoria.

Para atender ao requisito, seria necessário usar INNER JOIN, que retornaria apenas os alunos que possuem pelo menos um registro na tabela Monitoria. Além disso, a ordenação ORDER BY 2 DESC está correta, pois ordena pela segunda coluna da lista de seleção (numero_de_horas) em ordem decrescente. O alias nr_horas_atendimento é apenas um apelido para a coluna, não afetando a ordenação.

A pegadinha da questão está em confundir o efeito do LEFT OUTER JOIN com o do INNER JOIN. O candidato pode pensar que, por haver uma condição de junção, apenas os registros com correspondência serão retornados, mas o LEFT OUTER JOIN preserva todos os registros da tabela à esquerda. Essa distinção é crucial para interpretar corretamente o resultado de uma consulta.

Item — ❌ Errado

O comando SQL apresentado utiliza LEFT OUTER JOIN, que retorna todos os registros da tabela Aluno, mesmo aqueles sem correspondência na tabela Monitoria. Isso faz com que a consulta inclua alunos que não possuem nenhuma monitoria, contrariando o requisito de "apresentada com pelo menos um registro na tabela Monitoria". Para atender ao requisito, seria necessário usar INNER JOIN, que retorna apenas os registros com correspondência nas duas tabelas.

A ordenação ORDER BY 2 DESC está correta, pois ordena pela segunda coluna da lista de seleção (numero_de_horas) em ordem decrescente. O alias nr_horas_atendimento é apenas um apelido para a coluna, não afetando a ordenação.

Gabarito: Errado

Link permanente: /questoes/ce403672