Pular para o conteúdo principal

Questão de Banco de Dados — SQL — Quadrix 2024

Banco de DadosSQL
Código
qg347345
Banca
Quadrix
Órgão
CFP
Ano
2024
Nível
Superior
Cargo
Analista Técnico/TI/Desenvolvimento

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 o item seguinte.

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.nomeFROM psicologo pWHERE p.id_psicologo IN (SELECT i.id_psicologoFROM inscricao iJOIN certificado c ON c.id_inscricao = i.id_inscricaoWHERE i.id_curso = (SELECT id cursoFROM cursoWHERE duracao = (ELECT 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”.

Consultas SQL aninhadas e a semântica de IN

Gabarito: ERRADO (letra E). A instrução SQL apresentada contém múltiplos erros de sintaxe que a tornam inválida — como SELECT id curso (sem o ponto entre o nome da coluna e o alias) e ELECT MAX(duracao) (faltando o S de SELECT) —, além de um erro lógico: ela busca os psicólogos que concluíram o curso de maior duração, e não o curso com o maior número de inscritos, como afirma o enunciado. Portanto, a afirmação está incorreta.

A questão exige dois níveis de análise: primeiro, verificar se a consulta é sintaticamente válida; segundo, verificar se ela atende ao objetivo declarado. Vamos decompor a instrução para entender cada problema.

Análise da sintaxe da consulta

A consulta apresentada é:

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 = (
            ELECT MAX(duracao)
            FROM curso
        )
    )
);

Observando atentamente, encontramos dois erros de sintaxe claros:

  1. SELECT id curso — Na subconsulta mais interna, a intenção é selecionar a coluna id_curso da tabela curso. No entanto, a escrita id curso é interpretada como id com o alias curso, o que está incorreto. O correto seria SELECT id_curso ou SELECT curso.id_curso.

  1. ELECT MAX(duracao) — Falta o S inicial, tornando a palavra ELECT inválida. O correto é SELECT MAX(duracao).

Esses erros de sintaxe, por si só, já tornam a instrução inválida e impossível de executar em qualquer SGBD relacional.

Análise lógica da consulta

Mesmo que corrigíssemos os erros de sintaxe, a consulta ainda não atenderia ao objetivo declarado. O enunciado pede os nomes dos psicólogos que concluíram o curso com o maior número de inscritos. No entanto, a consulta busca os psicólogos que concluíram o curso com a maior duração (via MAX(duracao)).

Para encontrar o curso com o maior número de inscritos, seria necessário contar as inscrições por curso e selecionar o curso com a maior contagem. Uma consulta correta poderia ser:

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 inscricao
        GROUP BY id_curso
        ORDER BY COUNT(*) DESC
        LIMIT 1
    )
);

Nessa versão, a subconsulta mais interna agrupa as inscrições por curso, ordena pela contagem decrescente e limita a 1, retornando o curso com mais inscritos.

Conclusão

A instrução apresentada está incorreta tanto sintaticamente quanto logicamente. Portanto, o item está ERRADO.

Gabarito: letra E — ERRADO.

Link permanente: /questoes/qg347345