Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — Quadrix 2024

Banco de DadosConsultas e Comandos em SQL
Código
qa630753
Banca
Quadrix
Órgão
CFP
Ano
2024
Cargo
Ana Tec ( )
Um banco de dados relacional foi criado para registrar os cursos realizados por psicólogos em uma clínica de treinamento. O banco de dados não possui colunas com autoincremento e contém as seguintes tabelas: PSICOLOGO (id_psicologo (PK, INT), nome (VARCHAR), email (VARCHAR)); CURSO (id_curso (PK, INT), nome_curso (VARCHAR), duracao (INT)); INSCRICAO (id_inscricao (PK, INT), id_psicologo (FK, INT), id_curso (FK, INT), data_inscricao (DATE)); CERTIFICADO (id_certificado (PK, INT), id_inscricao (FK, INT), data_certificado (DATE)). Com base nessa situação hipotética e na linguagem SQL, julgue os itens seguintes.   As instruções SQL a seguir retornam os nomes dos psicólogos que concluíram o curso com o maior número de inscritos.   SELECT p.nome FROM psicologo p WHERE p.id_psicologo IN ( SELECT i.id_psicologo FROM inscricao i JOIN certificado c ON c.id_inscricao = i.id_inscricao WHERE i.id_curso = ( SELECT id curso FROM curso WHERE duracao = ( SELECT MAX(duracao) FROM curso ) ) );
  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: subconsultas e a semântica da consulta

Gabarito: ERRADO (letra E). A instrução SQL apresentada não retorna os nomes dos psicólogos que concluíram o curso com o maior número de inscritos, pois a subconsulta mais interna seleciona o curso de maior duração (MAX(duracao)), e não o curso com mais inscrições. O critério de seleção está trocado: a consulta busca o curso mais longo, não o mais procurado.

A questão cobra a interpretação de uma consulta SQL com subconsultas aninhadas. O comando SELECT é a base da linguagem de consulta estruturada, permitindo recuperar dados de uma ou mais tabelas por meio de cláusulas como WHERE, JOIN e subconsultas. A lógica da consulta apresentada é a seguinte: primeiro, a subconsulta mais interna calcula a duração máxima entre todos os cursos (SELECT MAX(duracao) FROM curso). Em seguida, a subconsulta intermediária seleciona o id_curso cuja duração é igual a esse valor máximo (WHERE duracao = (SELECT MAX(duracao) FROM curso)). Depois, outra subconsulta junta as tabelas inscricao e certificado para encontrar os psicólogos inscritos nesse curso específico que possuem certificado. Por fim, a consulta externa retorna os nomes desses psicólogos.

O erro central está na escolha do critério de seleção do curso. O enunciado pede o curso com o maior número de inscritos, ou seja, aquele que possui mais registros na tabela INSCRICAO. Para isso, seria necessário contar as inscrições por curso (COUNT(*)) e selecionar o curso com o maior valor. A consulta, no entanto, seleciona o curso com a maior duração, que é um atributo da tabela CURSO e não tem relação direta com a quantidade de inscrições. Um curso pode ser o mais longo em horas e ter poucos inscritos, enquanto um curso curto pode ter muitos. Portanto, a consulta não atende ao que foi pedido.

Para ilustrar, imagine que existam dois cursos: "Psicologia Clínica" com duração de 100 horas e 5 inscritos, e "Psicologia Organizacional" com duração de 200 horas e 2 inscritos. A consulta apresentada selecionaria o curso de 200 horas (o mais longo) e retornaria os psicólogos inscritos nele, ignorando o curso com mais inscrições (o de 100 horas). Isso demonstra claramente a divergência entre o que a consulta faz e o que o enunciado pede.

A pegadinha da banca está em confundir o critério de seleção: trocar "maior número de inscritos" por "maior duração". O candidato que não analisar a subconsulta com atenção pode assumir que a consulta está correta, pois a estrutura geral parece plausível. No entanto, a chave está na subconsulta mais interna, que define qual curso será considerado. É essencial verificar se o critério usado corresponde ao que foi solicitado no enunciado.

Guarde a distinção entre os critérios de seleção: para encontrar o curso com mais inscritos, é necessário usar uma função de agregação (COUNT) e comparar os totais; para encontrar o curso mais longo, basta usar MAX sobre a coluna de duração. É exatamente essa diferença que separa a consulta correta da incorreta.

  1. 1MAX(duracao) — curso mais longo
  2. 2Filtra curso pela duração máxima
  3. 3Junta inscrição e certificado
  4. 4Retorna psicólogos com certificado
LEVEL · soulevel.com.br

Item — ❌ ERRADO

A instrução SQL está incorreta porque a subconsulta mais interna seleciona o curso com a maior duração (MAX(duracao)), e não o curso com o maior número de inscritos. Para atender ao enunciado, seria necessário contar as inscrições por curso e selecionar o curso com o maior total, por exemplo, usando COUNT(*) e GROUP BY.

Gabarito: ERRADO (letra E).

Link permanente: /questoes/qa630753