Questão nº 37
Questão de Análise de Sistemas · FGV TJDFT 2022 (nº 37)
Considere um banco de dados relacional que contém uma única tabela, TURFE, cuja estrutura é exibida com sua instância a seguir.
Para cada páreo, ou corrida, são armazenados os nomes dos cavalos participantes e os respectivos tempos. A classificação de cada cavalo numa corrida segue a ordem crescente de tempo. Não há empates.
Com relação à tabela TURFE, descrita anteriormente, o comando SQL que exibe, para cada páreo, somente o cavalo vencedor com o respectivo tempo é:
- A```sql
select pareo, cavalo, tempo
from TURFE
where not exists
(select * from TURFE t
where t.pareo = TURFE.pareo
and t.tempo < TURFE.tempo)
``` (alternativa correta) - B```sql
select pareo, cavalo, tempo
from TURFE
where exists
(select * from TURFE t
where t.pareo = TURFE.pareo
and t.tempo > TURFE.tempo)
``` - C```sql
select pareo, cavalo, tempo
from TURFE
where not exists
(select * from TURFE t
where t.pareo <> TURFE.pareo
and t.tempo = TURFE.tempo)
``` - D```sql
select pareo, cavalo, tempo
from TURFE
where exists
(select * from TURFE t
where t.pareo = TURFE.pareo
and t.tempo < TURFE.tempo)
``` - E```sql
select pareo, cavalo, tempo
from TURFE
where not exists
(select * from TURFE t
where t.pareo = TURFE.pareo
and t.tempo <> TURFE.tempo)
```
Resposta comentada
Gabarito Alternativa A
Conceito-chave: Para achar o vencedor de cada páreo, você precisa encontrar o cavalo cujo tempo é o menor entre todos os do mesmo páreo. A subconsulta correlacionada compara cada linha da tabela externa com as linhas da tabela interna, e o NOT EXISTS filtra exatamente quem não tem ninguém "melhor" (menor tempo) no mesmo páreo.
- (A) Correta: A subconsulta procura, no mesmo páreo, um outro cavalo com tempo menor que o da linha atual. Se
NOT EXISTS(não existe ninguém com tempo menor), então a linha atual é a de menor tempo — o vencedor. É o gabarito. - (B) Incorreta: Usa
EXISTScomt.tempo > TURFE.tempo, ou seja, seleciona cavalos que têm alguém mais lento no mesmo páreo. Isso retornaria todos os cavalos, exceto o último colocado (o mais lento), não apenas o vencedor. - (C) Incorreta: Compara
t.pareo <> TURFE.pareo(páreos diferentes) com tempos iguais. Isso não tem relação com a classificação dentro de um páreo; poderia retornar cavalos de corridas distintas, sem lógica de vencedor. - (D) Incorreta: Usa
EXISTScomt.tempo < TURFE.tempono mesmo páreo. Isso seleciona cavalos que têm alguém mais rápido que eles — ou seja, todos os perdedores, nunca o vencedor. É o distrator mais tentador, pois inverte a lógica doNOT EXISTSda alternativa correta, fazendo o aluno achar que "existe alguém menor" indica vitória, quando na verdade indica derrota. - (E) Incorreta: A condição
t.tempo <> TURFE.tempono mesmo páreo verifica se existe qualquer outro cavalo com tempo diferente. Como não há empates, sempre existirá um tempo diferente para qualquer linha, entãoNOT EXISTSnunca seria verdadeiro e a consulta retornaria vazio.
Fonte: FGV TJDFT 2022 Analista Judiciário - Análise de Sistemas (Caderno Tipo 1). Reproduzida para fins de estudo.
