Questão FC369470
William está trabalhando com a base de dados de uma clínica, onde estão presentes as entidades descritas a seguir. Paciente (Id: Integer PK, Nome: Varchar(50)) Medico (Id: Integer
Linguagem SQL
FGV · 2024
William está trabalhando com a base de dados de uma clínica, onde estão presentes as entidades descritas a seguir.
Paciente (Id: Integer PK,
Nome: Varchar(50))
Medico (Id: Integer PK, Nome: Varchar(50))
Atendimento (Id: Integer PK,
IdPaciente: Integer FK(Paciente),
IdMedico: Integer FK(Medico),
Data: Date)
Para que William obtenha os nomes dos pacientes que foram tratados por todos os médicos, a instrução SQL a ser utilizada é:
- select p.nome from paciente p, atendimento a where a.idpaciente = p.id and a.idmedico = all (select id from medico);
- select p.nome from paciente p where not exists ( select id from medico m where id not in ( select idmedico from atendimento where idpaciente = p.id));
- select p.nome from paciente p where exists ( select idmedico from atendimento where idpaciente = p.id);
- select p.nome from paciente p, atendimento a where a.idpaciente=p.id group by p.nome having count(*) = (select count(*) from medico);
- select p.nome from paciente p, atendimento a where a.idpaciente = p.id and a.idmedico = any (select id from medico);
Mostrar resposta e comentário
Gabarito
B
Comentário do professor
A consulta seleciona os nomes de cada paciente que foi atendido por todos os médicos. O mecanismo é a negação da existência: NOT EXISTS garante que não exista nenhum médico que não tenha atendido o paciente.
Para cada linha de paciente p, a subconsulta correlacionada (correlated subquery) usa p.id em where idpaciente = p.id para obter os médicos que o paciente efetivamente teve. Em seguida, o predicado NOT IN verifica se há algum medico m cujo id NÃO está nessa lista. Se tal médico não existir, significa que o paciente foi atendido por todos os médicos, então o nome é incluído.
Observação: se houver NULL em idmedico, NOT IN pode produzir resultados inesperados; nesse caso, preferir a lógica com NOT EXISTS aninhado evita esse problema.
Conteúdo do catálogo FC Concursos · Atualizado em