Questão nº 48
Questão de Tecnologia da Informação · CESGRANRIO BASA 01/2018 (nº 48)
Considere que, em um modelo relacional, há três tabelas bem formadas denominadas Cliente, Compra (que representa os produtos comprados por um cliente) e Produto. A PK dos clientes é o CPF, e a PK dos produtos é um código. Há atributos nome e UF de nascimento para os clientes, e atributos fabricante e categoria para os produtos. Ou seja, Cliente (cpf, nome, UF), Produto (cod, fabricante, categoria) e Compra (cpf, cod). Observe-se o seguinte comando SQL:
SELECT DISTINCT P.fabricante
FROM Produto P, Compra C
WHERE P.cod = C.cod
AND P.categoria = 'celular'
AND C.cpf IN (SELECT cpf FROM Cliente WHERE UF = 'RS')
Esse comando retorna dados que respondem à seguinte pergunta:
- A"Fabricante dos produtos que foram comprados no Rio Grande do Sul".
- B"Fabricante dos celulares que não foram comprados por clientes nascidos no Rio Grande do Sul".
- C"Fabricante dos produtos que foram produzidos no Rio Grande do Sul".
- D"Fabricante dos celulares que foram comprados no Rio Grande do Sul".
- E"Fabricante dos celulares que foram comprados por clientes nascidos no Rio Grande do Sul". (alternativa correta)
Resposta comentada
Gabarito Alternativa E
O comando junta as tabelas Produto e Compra pela chave cod, filtra os produtos da categoria 'celular' e, com o IN, seleciona apenas compras feitas por clientes cujo UF (estado de nascimento) é 'RS'. O DISTINCT só evita repetir fabricantes. Ou seja, a consulta devolve fabricantes de celulares comprados por clientes nascidos no RS — não “comprados no RS” (a tabela Compra não tem local de compra).
- (A) Incorreta: A consulta não usa nenhum atributo de local de compra (não existe esse campo nas tabelas); o
UFé de nascimento do cliente, não do local da compra. - (B) Incorreta: O
INfiltra apenas clientes do RS, não os exclui; portanto, não retorna fabricantes de celulares “não comprados” por esses clientes. - (C) Incorreta: A consulta não menciona produção nem local de fabricação;
UFé do cliente, efabricanteé um nome de empresa, não um estado. - (D) Incorreta: A pegadinha clássica: “comprados no Rio Grande do Sul” sugere local da compra, mas a tabela
Comprasó temcpfecod— não há cidade/UF da compra. OUFse refere ao nascimento do cliente. - (E) Correta: O
WHEREexigeP.categoria = 'celular', oINexige clientes comUF = 'RS', e oJOIN(P.cod = C.cod) liga produtos a compras desses clientes — resultando exatamente em “fabricante dos celulares comprados por clientes nascidos no RS”.
Fonte: CESGRANRIO BASA 01/2018 Técnico Científico - Área de Formação: Tecnologia da Informação. Reproduzida para fins de estudo.