Questão nº 56

Questão de Tecnologia da Informação · FCC DPE-AM 2017 (nº 56)

FCC2017Analista em Gestão Especializado em Tecnologia da Informação de Defensoria - Analista de Banco de DadosTecnologia da Informação
Gabarito: Ever comentário ↓

Sejam as seguintes tabelas de um banco de dados relacional:
Médico (CRM, Nome-Médico, Especialidade)
Atende (ID, CRM)
Paciente (ID, Nome-Paciente, Data-Nascimento)
O comando T-SQL para obter o nome dos pacientes, o nome e especialidade de seus médicos é:

Resposta comentada

Gabarito Alternativa E

Para obter dados de várias tabelas que se relacionam, usamos o comando SELECT junto com a cláusula FROM para listar as tabelas e a cláusula WHERE para especificar as condições de junção (como as tabelas se conectam). Sem as condições de junção corretas, o banco de dados fará um produto cartesiano, combinando cada linha de uma tabela com cada linha das outras, o que raramente é o desejado.

  • (A) Incorreta: Esta consulta lista todas as tabelas no FROM mas não especifica nenhuma condição de junção no WHERE. Isso resultaria em um produto cartesiano, onde cada médico seria combinado com cada registro de atendimento e cada paciente, gerando um resultado gigante e sem sentido.
  • (B) Incorreta: Esta é a armadilha da banca. Embora liste todas as tabelas e inclua uma cláusula WHERE, as condições CRM = CRM e ID = ID são sempre verdadeiras e não estabelecem as ligações entre as tabelas. CRM existe em Médico e Atende, e ID em Atende e Paciente. Sem especificar Médico.CRM = Atende.CRM e Atende.ID = Paciente.ID, o banco de dados não sabe como juntá-las, resultando, na prática, em um produto cartesiano, assim como na alternativa A.
  • (C) Incorreta: A cláusula FROM lista apenas Médico e Paciente. No entanto, a cláusula WHERE tenta referenciar a tabela Atende (Atende.CRM e Atende.ID), que não foi incluída no FROM. Isso geraria um erro de sintaxe, pois não se pode referenciar uma tabela que não está na lista de origem.
  • (D) Incorreta: Esta alternativa lista apenas Médico e Paciente no FROM e não inclui a tabela Atende. A tabela Atende é essencial para ligar os médicos aos pacientes. Sem ela, não é possível saber qual médico atende qual paciente, e a consulta não conseguiria o resultado desejado.
  • (E) Correta: Esta é a resposta correta. A cláusula FROM Médico, Atende, Paciente lista todas as tabelas necessárias. A cláusula WHERE Médico.CRM = Atende.CRM AND Atende.ID = Paciente.ID estabelece corretamente as condições de junção: Médico.CRM = Atende.CRM conecta a tabela Médico com a tabela Atende, e Atende.ID = Paciente.ID conecta a tabela Atende com a tabela Paciente. Isso garante que apenas as linhas relacionadas entre as três tabelas sejam combinadas, fornecendo o nome do paciente, o nome do médico e sua especialidade.

Fonte: FCC DPE-AM 2017 Analista em Gestão Especializado em Tecnologia da Informação de Defensoria - Analista de Banco de Dados (Caderno Tipo 001). Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho