Considere um banco de dados relacional que possua as tabelas...

Próximas questões
Com base no mesmo assunto
Q445756 Banco de Dados
Considere um banco de dados relacional que possua as tabelas a seguir, e que em cada tabela os atributos sublinhados formem a chave primária:

PRODUTO  (idP, descricaoP)
LOJA           (idL, nomeL, endereçoL)
OFERTA     (idP, idL, preçoO)

Nesse banco de dados a tabela Oferta contém informações sobre as lojas onde cada produto é vendido e o respectivo preço, e todas as tabelas possuem pelo menos um registro. Sendo assim, o comando SQL

select p.descricaoP
from produto p
where not exists
           (select *
            from loja l
            where not exists
                      (select *
                       from oferta o
                       where o.idP=p.idP and
                                 o.idL=l.idL))

produz a lista de produtos que:
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Alternativa correta: B - todas as lojas vendem.

Para compreender a questão é necessário conhecer a semântica do comando SQL utilizado, que envolve subconsultas e a cláusula NOT EXISTS. A questão envolve entender como as tabelas se relacionam por meio de chaves primárias e estrangeiras e como a lógica das subconsultas determina o conjunto resultante.

A subconsulta mais interna verifica a existência de uma oferta do produto p na loja l. A segunda subconsulta, que encapsula a primeira, verifica se há lojas l que não vendem o produto p. A cláusula NOT EXISTS nessa segunda subconsulta inverte a lógica – estamos buscando por lojas que vendem o produto. Finalmente, a consulta principal procura por produtos p para os quais não existe nenhuma loja que não os venda.

O comando SQL da questão retorna produtos para os quais, em todas as lojas em que são vendidos, ao menos uma oferta foi registrada – ou seja, não há loja alguma que não venda esses produtos. Portanto, o resultado inclui os produtos vendidos por todas as lojas. Esta é a lógica que sustenta a alternativa B como a correta.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

Não entendi esta questão. Alguém poderia ajudar?

Por mim é  a letra  A , nenhuma das lojas vende.... Vamos de trás pra frente .

seleciona todos os produtos e lojas que tem oferta.

seleciona só as lojas que não tem oferta

seleciona só os produtos  que não tem nas lojas..


Para mim é uma lista dos produtos que não tem  nas lojas. 

Do fim da consulta para o início temos:

" select * 
   from oferta o 
    where o.idP=p.idP and 
     o.idL=l.idL  "   ---->  Ofertas do produto + loja, vamos chamar de X.


"select * 
   from loja l 
   where not exists 
   ( X ) "   ---> Lojas que não possuem ofertas do produto, vamos chamar de Y.


"select p.descricaoP 
  from produto p 
  where not exists  

   ( Y )  ---> Produtos que não possuem lojas que não o ofertem, ou seja, produtos que são vendidos em todas as lojas.

Resposta: B



NOT EXISTS ANINHADO COM NOT EXISTS => TODOS! GUARDA O BIZU!

NOT EXISTS + NOT EXISTS = TODOS!

No enunciado é mencionado o "pelo menos um" aí seria EXISTS + EXISTS!

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo