FC ConcursosFC Concursos

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.

  1. SELECT Medico.CRM, nomeMedico FROM Medico LEFT JOIN ClinicaMedico ON ClinicaMedico.codClinica IS NULL
  2. SELECT Medico.CRM, nomeMedico FROM Medico RIGHT JOIN ClinicaMedico ON ClinicaMedico.codClinica ISNULL
  3. SELECT CRM, nomeMedico FROM Medico WHERE NOT EXISTS (SELECT * FROM ClinicaMedico WHERE CRM = Medico. CRM)
  4. 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

Continue aprendendo