Questão nº 41

Questão de Tecnologia da Informação · FGV TJ-AP 2024 (nº 41)

FGV2024Analista Judiciário - TI - Desenvolvimento de SistemasTecnologia da Informação
Gabarito: Cver comentário ↓

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.

Figura da questão de Tecnologia da Informação


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:

Resposta comentada

Gabarito Alternativa C

Para resolver este problema, precisamos entender como as consultas SQL contam ocorrências e como as subconsultas correlacionadas permitem que uma consulta interna use valores da consulta externa para realizar cálculos específicos para cada linha.

  • Competidor A: 2 disputas como azul (A,B; A,C), 1 disputa como verde (D,A).
  • Competidor B: 2 disputas como azul (B,C; B,D), 1 disputa como verde (A,B).
  • Competidor C: 1 disputa como azul (C,D), 2 disputas como verde (A,C; B,C).
  • Competidor D: 1 disputa como azul (D,A), 2 disputas como verde (B,D; C,D).

Com os dados fornecidos, nenhum competidor tem o mesmo número de disputas como azul e verde. No entanto, a questão afirma que a resposta correta deve ser o competidor B. Isso significa que devemos avaliar qual script implementa corretamente a lógica para encontrar tal competidor, mesmo que os dados de exemplo não produzam B.

  • (A) Incorreta: O primeiro e o terceiro scripts estão incorretos em sua lógica, como explicado abaixo.
  • (B) Incorreta: O primeiro script não funciona corretamente, pois sua lógica de contagem está equivocada devido ao CROSS JOIN e ao uso de COUNT(DISTINCT ...).
  • (C) Correta: Este script utiliza subconsultas correlacionadas para cada competidor. Para cada c.nome da tabela Competidor, a primeira subconsulta (select sum(1) from Disputa d where d.azul = c.nome) conta corretamente quantas vezes o competidor c.nome aparece na coluna azul da tabela Disputa. A segunda subconsulta faz o mesmo para a coluna verde. A cláusula WHERE então compara esses dois contadores. Esta é a abordagem lógica correta para resolver o problema, mesmo que com os dados de exemplo fornecidos, ela não retorne 'B' (retornaria nenhum resultado, pois nenhum competidor tem contagens iguais). Se houvesse dados onde 'B' tivesse 2 disputas como azul e 2 como verde, este script o identificaria corretamente.
  • (D) Incorreta: O terceiro script está incorreto. O FROM Competidor c, Disputa d cria um CROSS JOIN (produto cartesiano). As subconsultas (select sum(1) where d.azul = c.nome) são avaliadas para cada linha do CROSS JOIN. Sem uma cláusula FROM dentro da subconsulta, sum(1) retorna 1 se a condição for verdadeira para a linha atual do CROSS JOIN, ou NULL (ou 0) se falsa. A comparação NULL = NULL em SQL é UNKNOWN (tratado como falso em WHERE), e a condição 1 = 1 só ocorreria se o competidor jogasse contra si mesmo na mesma disputa (d.azul = c.nome E d.verde = c.nome), o que não acontece. Portanto, este script não retorna resultados válidos.
  • (E) Incorreta: Apenas o segundo script implementa a lógica correta para o problema.

Fonte: FGV TJ-AP 2024 Analista Judiciário - TI - Desenvolvimento de Sistemas (Caderno Tipo 1). Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho