Questão FC369447
Quando referenciadas, considere as tabelas relacionais Competidor e Disputa, cujas estruturas e instâncias são descritas abaixo. Todas as colunas são definidas como strings. A tabe
Linguagem SQL
FGV · 2024
Quando referenciadas, considere as tabelas relacionais Competidor e Disputa, cujas estruturas e instâncias são descritas abaixo. Todas as colunas são definidas como strings.
A tabela Disputa contém as disputas realizadas entre competidores que aparecem na tabela Competidor. Em cada disputa há dois competidores, um com camisa azul e outro com camisa verde.
Competidor
| Nome |
| A |
| B |
| C |
| D |
| E |
| F |
Disputa
| Azul | Verde |
| A | B |
| C | A |
| B | A |
| C | E |
| F | A |
| F | D |
João tem pouca experiência com SQL, mas precisa de uma consulta que exiba os competidores que têm o mesmo número de disputas com as camisas azul e verde. João escreveu três scripts, utilizando as tabelas Competidor e Disputa, como definidas anteriormente, e tentou a sorte.
select distinct c.nome
from Competidor c, Disputa d
group by c.nome
having count(distinct d.azul)
= count(distinct d.verde)
select c.nome
from Competidor c
where (select sum(1)
from Disputa d where d.azul = c.nome)
= (select sum(1)
from Disputa d where d.verde = c.nome)
select distinct c.nome
from Competidor c, Disputa d
where (select sum(1) where d.azul = c.nome)
= (select sum(1) where d.verde = c.nome)
Dado que a resposta correta deve exibir somente o competidor B, conclui-se que:
- nenhum dos scripts funciona;
- somente o primeiro script funciona;
- somente o segundo script funciona;
- somente o terceiro script funciona;
- os três scripts funcionam.
Mostrar resposta e comentário
Gabarito
Certo
Comentário do professor
O segundo script funciona porque usa subconsultas correlacionadas que, para cada linha de Competidor c, calculam separadamente o total de disputas em que esse competidor apareceu como azul e como verde.
A expressão SUM(1) dentro de cada subconsulta soma 1 para cada linha de Disputa d que satisfaz a condição de correlação (d.azul = c.nome ou d.verde = c.nome), isto é, implementa a contagem de ocorrências. Formalmente avalia-se \( \sum 1_{d.azul=c.nome} = \sum 1_{d.verde=c.nome} \).
Como as subconsultas são executadas por competidor, a comparação é feita no nível de cada indivíduo, não globalmente. O resultado inclui apenas competidores cuja contagem de aparições como azul é igual à de aparições como verde.
No conjunto dado, apenas o competidor B tem 1 aparição como azul e 1 como verde, portanto é o único retornado pela consulta.
Conteúdo do catálogo FC Concursos · Atualizado em