FC ConcursosFC Concursos

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:

  1. nenhum dos scripts funciona;
  2. somente o primeiro script funciona;
  3. somente o segundo script funciona;
  4. somente o terceiro script funciona;
  5. 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

Continue aprendendo