Questão nº 43
Questão de Tecnologia da Informação · FGV SEFAZ-ES 2021 - Manhã (nº 43)
Utilize as tabelas T, R e S para resolver as próximas 3 questões
Considere um banco de dados relacional contendo as tabelas T, R e S, cujas instâncias são exibidas a seguir.
\
No contexto da instância da tabela S, considere a execução do comando SQL a seguir.
SELECT *
FROM S
WHERE (NOT G=10 OR I=12)
AND NOT (H > 100 and H < 1000)
Assinale o conjunto de linhas que corresponde ao resultado produzido pelo referido comando.
- A```
10
12040
12
10
12041
12
``` - B```
10
12040
12
10
12041
12
50
1497
12
``` - C```
50
215
12
70
214
20
``` - D```
10
12040
12
10
12041
12
50
1497
12
50
1498
10
``` (alternativa correta) - E```
50
1497
12
50
1498
10
```
Resposta comentada
Gabarito Alternativa D
A cláusula WHERE em SQL é usada para filtrar linhas de uma tabela com base em condições especificadas, utilizando operadores lógicos como AND (E), OR (OU) e NOT (NÃO) para combinar ou inverter essas condições. Para resolver a questão, avaliamos cada parte da condição WHERE para cada linha da tabela S.
A condição WHERE é: (NOT G=10 OR I=12) AND NOT (H > 100 and H < 1000)
Vamos analisar cada parte:
-
Primeira parte da condição:
(NOT G=10 OR I=12)NOT G=10é verdadeiro seGfor diferente de 10.I=12é verdadeiro seIfor igual a 12.- Esta parte é verdadeira se
Gfor diferente de 10 OUIfor igual a 12. - Para todas as linhas da tabela
S, esta condição é VERDADEIRA:- Linhas 1 e 2 (
G=10,I=12):(NOT TRUE OR TRUE)->(FALSE OR TRUE)->TRUE - Linhas 3, 4, 5 (
G=50,I=12ouI=10):(NOT FALSE OR ...)->(TRUE OR ...)->TRUE - Linha 6 (
G=70,I=20):(NOT FALSE OR FALSE)->(TRUE OR FALSE)->TRUE
- Linhas 1 e 2 (
-
Segunda parte da condição:
NOT (H > 100 and H < 1000)- Esta condição é a negação de
Hestar entre 100 e 1000 (exclusivo). - Portanto, é verdadeira se
Hfor menor ou igual a 100 OUHfor maior ou igual a 1000. (H <= 100 OR H >= 1000). - Vamos avaliar para cada linha:
- Linha 1 (
H=12040):(12040 <= 100 OR 12040 >= 1000)->(FALSE OR TRUE)->TRUE - Linha 2 (
H=12041):(12041 <= 100 OR 12041 >= 1000)->(FALSE OR TRUE)->TRUE - Linha 3 (
H=1497):(1497 <= 100 OR 1497 >= 1000)->(FALSE OR TRUE)->TRUE - Linha 4 (
H=1498):(1498 <= 100 OR 1498 >= 1000)->(FALSE OR TRUE)->TRUE - Linha 5 (
H=215):(215 <= 100 OR 215 >= 1000)->(FALSE OR FALSE)->FALSE - Linha 6 (
H=214):(214 <= 100 OR 214 >= 1000)->(FALSE OR FALSE)->FALSE
- Linha 1 (
- Esta condição é a negação de
-
Combinação final (Primeira parte AND Segunda parte):
- Linha 1 (10, 12040, 12):
TRUE AND TRUE->TRUE(Selecionada) - Linha 2 (10, 12041, 12):
TRUE AND TRUE->TRUE(Selecionada) - Linha 3 (50, 1497, 12):
TRUE AND TRUE->TRUE(Selecionada) - Linha 4 (50, 1498, 10):
TRUE AND TRUE->TRUE(Selecionada) - Linha 5 (50, 215, 12):
TRUE AND FALSE->FALSE(Não selecionada) - Linha 6 (70, 214, 20):
TRUE AND FALSE->FALSE(Não selecionada)
- Linha 1 (10, 12040, 12):
As linhas resultantes são:
(G=10, H=12040, I=12)
(G=10, H=12041, I=12)
(G=50, H=1497, I=12)
(G=50, H=1498, I=10)
Convertendo para o formato da alternativa:
10
12040
12
10
12041
12
50
1497
12
50
1498
10
- (A) Incorreta: Esta alternativa inclui apenas as duas primeiras linhas corretas, omitindo as duas últimas.
- (B) Incorreta: Esta alternativa inclui as três primeiras linhas corretas, omitindo a última.
- (C) Incorreta: Esta alternativa apresenta linhas que não satisfazem a condição
WHERE(linhas 5 e 6 da tabela S), pois para elas a segunda parte da condição (NOT (H > 100 and H < 1000)) é falsa. A armadilha aqui seria uma interpretação incorreta dos operadoresNOTeANDna segunda parte da condição. - (D) Correta: Esta alternativa corresponde exatamente ao conjunto de linhas que satisfazem todas as condições do comando SQL, conforme a análise detalhada acima.
- (E) Incorreta: Esta alternativa inclui apenas as duas últimas linhas corretas, omitindo as duas primeiras.
Fonte: FGV SEFAZ-ES 2021 - Manhã Auditor Fiscal da Receita Estadual (Caderno Tipo 1). Reproduzida para fins de estudo.
