Questão FC374541
Considere as seguintes tabelas que pertencem a parte de um determinado banco de dados: /*Tabela de Clínicas*/ Clinica(CodClinica, NomeClinica, LocalClinica) /* tabela de médicos */
Linguagem SQL
Instituto Consulplan · 2023
Considere as seguintes tabelas que pertencem a parte de um determinado banco de dados:
/*Tabela de Clínicas*/
Clinica(CodClinica, NomeClinica, LocalClinica)
/* tabela de médicos */
Medico(CRM, NomeMedico, Telefone)
/* tabela que relaciona médicos a clínicas */
ClinicaMedico(CodClinica, CRM)
CodClinica referencia Clinica,
CRM referencia Medico
Utilizando o SQL Server 2019, assinale o comando que lista códigos e nomes dos médicos que não atuam em nenhuma clínica.
- SELECT Medico.CRM, nomeMedico FROM Medico LEFT JOIN ClinicaMedico ON ClinicaMedico.codClinica IS NULL
- SELECT Medico.CRM, nomeMedico FROM Medico RIGHT JOIN ClinicaMedico ON ClinicaMedico.codClinica ISNULL
- SELECT CRM, nomeMedico FROM Medico WHERE NOT EXISTS (SELECT * FROM ClinicaMedico WHERE CRM = Medico. CRM)
- SELECT CRM, nomeMedico FROM Medico WHERE CRM NOT IN (SELECT * FROM ClinicaMedico WHERE CRM = Medico.CRM)
Mostrar resposta e comentário
Gabarito
Certo
Comentário do professor
O comando SELECT CRM, nomeMedico FROM Medico WHERE NOT EXISTS (SELECT * FROM ClinicaMedico WHERE CRM = Medico.CRM) usa uma consulta correlacionada: para cada linha da tabela Medico verifica-se se existe alguma linha em ClinicaMedico com o mesmo CRM.
O predicado NOT EXISTS avalia como verdadeiro quando a subconsulta não retorna nenhuma linha para o CRM do médico atual, ou seja, quando esse médico não está relacionado a nenhuma clínica.
Assim, o resultado lista exatamente os campos CRM e nomeMedico dos médicos que não atuam em clínica. Para desempenho, é recomendado ter índice em ClinicaMedico(CRM), pois a subconsulta é executada por linha da tabela externa.
Conteúdo do catálogo FC Concursos · Atualizado em