Questão nº 38
Questão de Tecnologia da Informação · FGV TCE-SP 2023 (nº 38)
FGV2023Agente da Fiscalização - TITecnologia da Informação
Gabarito: Dver comentário ↓
Quando referidas, considere as tabelas relacionais TX e TY, criadas e instanciadas com o script SQL a seguir.
create table TY(C int primary key not null, A int) create table TX(A int primary key not null, B int, foreign key (B) references TY(C) on delete cascade ) insert into TY values (1,0) insert into TY(C) values (2) insert into TY(C) values (3) insert into TY values (5,NULL) insert into TY values (6,NULL) insert into TX values (1,2) insert into TX values (2,1) insert into TX values (3,2) insert into TX values (4,2)
Com referência às tabelas TX e TY, como descritas anteriormente, analise o comando SQL a seguir.
insert into TX(A, B)
select C,A FROM TY
where C not in (select A from TX)
or A in (select A from TX)
O conjunto de linhas inseridas é:
- Avazio;
- B0, NULL;
- C2, NULL e 3, NULL;
- D5, NULL e 6, NULL; (alternativa correta)
- E6, NULL.
Resposta comentada
Gabarito Alternativa D
A instrução INSERT INTO ... SELECT adiciona linhas a uma tabela usando os resultados de uma consulta SELECT, que pode incluir subconsultas para filtrar os dados.
- (A) Incorreta: A análise da cláusula
WHEREmostra que algumas linhas serão selecionadas para inserção. - (B) Incorreta: A alternativa
0, NULLnão corresponde a nenhuma combinação(C, A)da tabelaTYque seria inserida emTX(A, B). Os valores deCemTYsão 1, 2, 3, 5, 6. - (C) Incorreta: Esta é a alternativa mais tentadora. Para as linhas
(C=2, A=NULL)e(C=3, A=NULL)da tabelaTY, a subconsulta(select A from TX)retorna{1, 2, 3, 4}.- Para
(C=2, A=NULL):2 not in ({1, 2, 3, 4})éFALSE.NULL in ({1, 2, 3, 4})éUNKNOWN(pois comparações comNULLresultam emUNKNOWN). A condiçãoFALSE OR UNKNOWNresulta emUNKNOWN. A cláusulaWHEREsó retorna linhas para as quais a condição éTRUE, descartandoUNKNOWN. Portanto, esta linha não é selecionada. - O mesmo ocorre para
(C=3, A=NULL). - Armadilha da banca: A pegadinha aqui é o tratamento de
NULLem operadoresINeNOT IN.NULL IN (lista)eNULL NOT IN (lista)sempre resultam emUNKNOWN, eUNKNOWNem uma cláusulaWHEREfaz com que a linha seja descartada.
- Para
- (D) Correta: Vamos analisar as linhas de
TYque satisfazem a condiçãoC not in (select A from TX) or A in (select A from TX). A subconsulta(select A from TX)retorna{1, 2, 3, 4}.- Para
(C=1, A=0):1 not in {1,2,3,4}éFALSE.0 in {1,2,3,4}éFALSE.FALSE OR FALSEéFALSE. Não selecionado. - Para
(C=2, A=NULL):2 not in {1,2,3,4}éFALSE.NULL in {1,2,3,4}éUNKNOWN.FALSE OR UNKNOWNéUNKNOWN. Não selecionado. - Para
(C=3, A=NULL):3 not in {1,2,3,4}éFALSE.NULL in {1,2,3,4}éUNKNOWN.FALSE OR UNKNOWNéUNKNOWN. Não selecionado. - Para
(C=5, A=NULL):5 not in {1,2,3,4}éTRUE.TRUE OR (qualquer coisa)éTRUE. Selecionado. Os valores inseridos serão(5, NULL). - Para
(C=6, A=NULL):6 not in {1,2,3,4}éTRUE.TRUE OR (qualquer coisa)éTRUE. Selecionado. Os valores inseridos serão(6, NULL).
As linhas selecionadas para inserção emTX(A, B)são(5, NULL)e(6, NULL).
- Para
- (E) Incorreta: Esta alternativa apresenta apenas uma parte do conjunto de linhas que seriam inseridas.
Fonte: FGV TCE-SP 2023 Agente da Fiscalização - TI (Caderno Tipo 1). Reproduzida para fins de estudo.