Questão nº 41

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

FGV2024Analista Judiciário - TI - Banco de DadosTecnologia da Informação
Gabarito: Aver 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


Considerando as tabelas Competidor e Disputa, descritas anteriormente, analise o comando SQL a seguir.

select *
from competidor c, disputa d
where (c.nome = d.azul and c.nome = d.verde)
   or (c.nome = d.verde and c.nome = d.azul)

O número de linhas produzidas pela execução desse comando, sem contar a linha de títulos, é:

Resposta comentada

Gabarito Alternativa A

Um JOIN em SQL combina linhas de duas ou mais tabelas. Quando não especificamos um tipo de JOIN (como INNER JOIN ou LEFT JOIN) e listamos as tabelas separadas por vírgula no FROM, o SQL realiza um CROSS JOIN (produto cartesiano), que gera todas as combinações possíveis de linhas entre as tabelas. A cláusula WHERE é usada para filtrar essas linhas combinadas, mantendo apenas aquelas que satisfazem a condição especificada.

  • (A) Correta: O comando SQL realiza um CROSS JOIN entre as 6 linhas da tabela Competidor e as 3 linhas da tabela Disputa, resultando em 6 * 3 = 18 linhas intermediárias. A condição where (c.nome = d.azul and c.nome = d.verde) or (c.nome = d.verde and c.nome = d.azul) pode ser simplificada para c.nome = d.azul AND c.nome = d.verde. Para que essa condição seja verdadeira, o nome do competidor (c.nome) deve ser igual ao nome do competidor de camisa azul (d.azul) E também igual ao nome do competidor de camisa verde (d.verde) na mesma disputa. Isso implica que d.azul teria que ser igual a d.verde. Ao analisar a tabela Disputa, percebemos que em nenhuma das disputas o competidor de camisa azul é o mesmo que o competidor de camisa verde (d.azul é sempre diferente de d.verde). Como a condição d.azul = d.verde nunca é satisfeita, a cláusula WHERE nunca será verdadeira para nenhuma das 18 linhas combinadas, resultando em 0 linhas no resultado final.
  • (B) Incorreta: Não há nenhuma linha que satisfaça a condição de que o competidor seja, ao mesmo tempo, o jogador de camisa azul e o de camisa verde em uma mesma disputa.
  • (C) Incorreta: 6 é o número de competidores, mas a query não retorna esse número de linhas.
  • (D) Incorreta: 18 seria o número de linhas se não houvesse a cláusula WHERE (apenas o resultado do CROSS JOIN). A armadilha aqui é ignorar ou interpretar erroneamente a condição de filtro do WHERE.
  • (E) Incorreta: 36 não corresponde a nenhum cálculo lógico para esta query.

Fonte: FGV TJ-AP 2024 Analista Judiciário - TI - Banco de Dados (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