Questão nº 84
Questão de Engenharia de Dados · FCC PMSP Analista TIC 2025 (nº 84)
A Secretaria Municipal de Mobilidade e Trânsito de uma Prefeitura solicitou um estudo para determinar a melhor rota entre dois bairros (A e B) considerando diversos fatores, tais como distância, tempo estimado de viagem, condições da estrada e custo do combustível. Os dados estão nas duas tabelas seguintes de um Banco de Dados Relacional Oracle:
- Bairros: Contêm informações sobre cada bairro, incluindo um ID único, nome e coordenadas geográficas.
- Rotas: Contêm informações sobre as rotas existentes entre os bairros, como ID da rota, bairro de origem, bairro de destino, distância, tempo estimado, condição da estrada e custo estimado.
Em uma consulta utilizando INNER JOIN, a expressão SQL correta para encontrar a rota mais eficiente entre dois bairros específicos, com base nos critérios definidos pelo órgão, é
- A`SELECT r.id_rota, r.distancia, r.tempo_estimado FROM ROTAS r INNER JOIN BAIRROS b ON r.bairro_origem = b.id_bairro WHERE b.nome = 'Bairro A' AND r.bairro_destino = 'Bairro B' ORDER BY r.distancia ASC, r.tempo_estimado ASC;` (alternativa correta)
- B`SELECT INNER JOIN r.id_rota, r.distancia, r.tempo_estimado FROM ROTAS r WHERE bairro_origem = 'Bairro A' AND bairro_destino = 'Bairro B' ORDER BY r.distancia ASC;`
- C`SELECT r.id_rota, r.distancia, r.tempo_estimado FROM ROTAS r INNER JOIN BAIRROS b ON r.bairro_origem = b.id_bairro WHERE b.nome = 'Bairro A';`
- D`SELECT * FROM ROTAS WHERE bairro_origem = 'Bairro A' AND bairro_destino = 'Bairro B' AND MIN(r.distancia) INNER JOIN ROTAS AND BAIRROS;`
- E`SELECT r.id_rota, MIN(r.distancia) FROM ROTAS r INNER JOIN BAIRROS b ON r.bairro_origem = b.id_bairro WHERE b.nome = 'Bairro A' GROUP BY r.id_rota;`
Resposta comentada
Gabarito Alternativa A
O INNER JOIN é uma operação em bancos de dados que combina linhas de duas ou mais tabelas, mostrando apenas os registros que possuem valores correspondentes em uma coluna comum entre elas.
(A) Correta: Esta alternativa utiliza o INNER JOIN para conectar a tabela `ROTAS` com a tabela `BAIRROS` através do `id_bairro` de origem, permitindo filtrar as rotas que partem do 'Bairro A'. Em seguida, filtra as rotas que chegam ao 'Bairro B' (assumindo que a coluna `r.bairro_destino` na tabela `ROTAS` armazena o nome do bairro de destino ou um valor comparável). Por fim, ordena os resultados pela distância e tempo estimado, buscando a rota mais eficiente.
(B) Incorreta: Apresenta um erro de sintaxe grave (`SELECT INNER JOIN`) e não utiliza o `JOIN` corretamente para consultar o nome do bairro de origem na tabela `BAIRROS`, o que é pedido no problema.
(C) Incorreta: Embora utilize o INNER JOIN corretamente para a origem, esta consulta não especifica o bairro de destino ('Bairro B') e também não ordena os resultados pelos critérios de eficiência, não resolvendo completamente o problema. Armadilha: Esta alternativa é tentadora porque a sintaxe do `INNER JOIN` e a filtragem da origem estão corretas, mas ela falha em abordar o destino e a ordenação por eficiência, que são partes cruciais da questão.
(D) Incorreta: Contém múltiplos erros de sintaxe, como o uso incorreto de `MIN()` na cláusula `WHERE` sem `GROUP BY` e uma sintaxe completamente inválida para o `INNER JOIN`.
(E) Incorreta: Não especifica o bairro de destino ('Bairro B') e o uso de `MIN(r.distancia)` agrupado por `r.id_rota` não faz sentido para encontrar a rota mais curta entre dois bairros específicos, pois cada `id_rota` é único.
Fonte: FCC PMSP Analista TIC 2025 Analista de Planejamento e Desenvolvimento Organizacional - Tecnologia da Informação e Comunicação (Caderno Tipo 001). Reproduzida para fins de estudo.