FC ConcursosFC Concursos

Questão FC295896

Um programador experiente estava revisando o código de um estagiário e detectou a instrução SQL abaixo, complicada demais para seu objetivo. SELECT * FROM Compras where codProduto

Linguagem SQL

CESGRANRIO · 2021

Um programador experiente estava revisando o código de um estagiário e detectou a instrução SQL abaixo, complicada demais para seu objetivo.

 

SELECT * FROM Compras where codProduto not in (select codProduto from Produtos where  codProduto<3 or valor<4000)

 

Para simplificar o código, sem alterar a resposta, a instrução apresentada acima pode ser substituída por

  1. SELECT * FROM Compras where codProduto<3 or valor<4000
  2. SELECT * FROM Compras where codProduto<3 and valor<4000
  3. SELECT * FROM Compras where codProduto<=3 and valor<=4000
  4. SELECT * FROM Compras where codProduto>=3 and valor>=4000
  5. SELECT * FROM Compras where codProduto>=3 or valor>=4000
Mostrar resposta e comentário

Gabarito

D

Comentário do professor

A alternativa correta é a consulta SELECT * FROM Compras where codProduto>=3 and valor>=4000. Ela reproduz exatamente o efeito lógico da expressão original com NOT IN sobre a subconsulta.

A subconsulta retirava da seleção todos os códigos que satisfazem \(codProduto<3\) ou \(valor<4000\). Aplicando a negação lógica (Lei de De Morgan), temos: NOT \((A \;ou\; B)\) = (NOT A) e (NOT B). Portanto, para permanecer na seleção é preciso simultaneamente \(codProduto \ge 3\) e \(valor \ge 4000\).

Assim, a versão com cláusula WHERE combinando as duas condições com AND é mais simples e produz o mesmo conjunto de linhas, além de ser mais legível e eficiente.

Conteúdo do catálogo FC Concursos · Atualizado em

Continue aprendendo