← Questões de Banco de Dados

Banco de Dados · FGV · 2023

Questão comentada de Banco de Dados

Num banco de dados relacional, considere a tabela Vencedores, cuja instância é exibida a seguir, com duas colunas, Tenista e Torneio, que representam alguns torneios que já foram vencidos por alguns tenistas. Tenista Torneio Roger Federer Australian Open Roger Federer Roland Garros Roger Federer Wimbledon Roger Federer US Open Pete Sampras US Open Pete Sampras Wimbledon Pete Sampras Australian Open Bjorn Borg Roland Garros Bjorn Borg Wimbledon Maria precisa escrever um comando SQL que liste os tenistas que venceram todos os torneios mencionados na coluna Torneio. O comando deve valer para qualquer instância válida da tabela, que pode conter diferentes tenistas e diferentes torneios. Assinale o comando que Maria deve usar.

Gabarito: E

A questão trata de um problema clássico de SQL: encontrar os tenistas que venceram todos os torneios que aparecem na tabela. Em linguagem de prova, isso costuma exigir a ideia de "para todo" (quantificação universal), e no SQL a forma mais segura de simular isso é com dupla negação: procurar um tenista para o qual não exista nenhum torneio da tabela que ele não tenha vencido. É o famoso truque do "não existe torneio faltando". O gabarito é a letra E porque ela faz exatamente isso. Primeiro, para cada tenista de v1, o comando procura torneios em v2 e, depois, verifica se não existe em v3 uma linha com aquele mesmo torneio e aquele mesmo tenista. Se não houver nenhum torneio faltante, o tenista é listado. Essa estrutura corresponde à divisão relacional, um padrão muito cobrado em Banco de Dados. As alternativas erradas não resolvem a ideia de "todos". Algumas só testam existência de linhas, outras comparam colunas de modo incorreto ou trazem sintaxe inválida. Em SQL, quando a banca quer universalidade, desconfie de soluções com EXISTS simples: muitas vezes falta justamente o "NOT EXISTS" externo para garantir que nenhum caso foi esquecido. Em resumo: a resposta certa é a que diz, em português de prova, "liste os tenistas para os quais não há torneio da tabela que não tenha sido vencido por eles". Isso é exatamente o que a letra E expressa.

Continue treinando

Questões relacionadas