Questão de Banco de Dados — Banco de Dados Relacionais — FCC 2018
Banco de Dados›Banco de Dados Relacionais
Código
fc044178
Banca
FCC
Órgão
DPE-AM
Ano
2018
Cargo
Analista em Gestão Especializado de Defensoria - Analista de Banco de Dados
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 é:
GabaritoE — SELECT Nome-Paciente, Nome-Médico, Especialidade
FROM Médico, Atende, Paciente
WHERE Médico.CRM = Atende.CRM AND Atende.ID = Paciente.ID
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”.
SQL: Junção de tabelas (JOIN)
Gabarito: letra E. Para obter o nome dos pacientes, o nome e a especialidade de seus médicos, é necessário realizar a junção das três tabelas (Médico, Atende e Paciente) utilizando as chaves estrangeiras: Médico.CRM = Atende.CRM e Atende.ID = Paciente.ID. A alternativa E é a única que atende a esses requisitos de forma correta.
A questão testa o entendimento de junções em SQL. Em um banco relacional, quando os dados estão em múltiplas tabelas, é preciso combinar as linhas através de condições que igualem as chaves primárias e estrangeiras. A ausência dessas condições gera um produto cartesiano, que não entrega o resultado esperado.
Alternativa A — ❌ Incorreta
A cláusula FROM lista as três tabelas, mas não possui cláusula WHERE. Isso resulta em um produto cartesiano, combinando todas as linhas de Médico com todas de Atende e todas de Paciente, sem qualquer filtro. O resultado não relaciona corretamente pacientes e médicos.
Alternativa B — ❌ Incorreta
Embora tenha um WHERE, as condições CRM = CRM e ID = ID são ambíguas (não especificam a qual tabela pertence cada coluna) e sempre verdadeiras (CRM = CRM é sempre verdade, o mesmo para ID = ID). Portanto, também gera um produto cartesiano, além de ser uma sintaxe incorreta (T-SQL exige qualificação quando há colunas de mesmo nome).
Alternativa C — ❌ Incorreta
A condição WHERE faz referência a Atende.CRM e Atende.ID, mas a tabela Atende não está listada na cláusula FROM. Isso causa um erro de sintaxe, pois não é possível usar uma tabela no WHERE que não foi declarada no FROM.
Alternativa D — ❌ Incorreta
Assim como a alternativa A, o FROM lista apenas Médico e Paciente, sem a tabela Atende e sem condição de junção. Isso gera um produto cartesiano entre Médico e Paciente, sem qualquer relação, o que não produz o resultado desejado (além de não haver conexão entre médico e paciente).
Alternativa E — ✅ Correta ⟵ GABARITO
Esta alternativa apresenta a junção correta: as três tabelas são listadas no FROM, e o WHERE especifica as condições de igualdade entre as chaves estrangeiras: Médico.CRM = Atende.CRM (liga médico ao atendimento) e Atende.ID = Paciente.ID (liga atendimento ao paciente). O resultado traz exatamente o nome do paciente, o nome do médico e sua especialidade, conforme solicitado.
PEGA ESSA DICA!
Ao construir consultas com múltiplas tabelas, sempre verifique se todas as tabelas necessárias estão no FROM e se as condições de junção (no WHERE ou em JOIN ... ON) ligam corretamente as chaves. Use prefixos de tabela (ex.: Medico.CRM) para evitar ambiguidade, especialmente quando colunas têm o mesmo nome em tabelas diferentes.