Pular para o conteúdo principal

Questão de Banco de Dados — SQL — FGV 2024

Banco de DadosSQL
Código
fg091421
Banca
FGV
Órgão
Prefeitura de Nova Iguaçu - RJ
Ano
2024
Nível
Superior
Cargo
Analista Tributário do Tesouro Municipal
Considere a seguinte sequência de comandos SQL:insert into tb_cliente(id_cliente, num_cpf, nome)values(1,'111','cli1'),(2,'222','cli2'),(3,'333','cli3'),(4,'444','cli4'),(5,'555','cli5');update tb_cliente set estado='RJ'where id_cliente%2!=0;create view v_clientes_rj asselect id_cliente, num_cpf, nome, estadofrom tb_cliente where estado = 'RJ';Após a execução dos três comandos SQL apresentados, o seguinte comando foi executado:insert into v_clientes_rjvalues (6,'cli6','6666','MG');Por fim, a seguinte consulta foi executada:select count(*) from v_clientes_rj;O retorno da última consulta executada será
  1. Ao valor 3, dado que a visão permanece selecionando tuplas de clientes do estado ‘RJ’.
  2. Bo valor 4, já que a execução do último comando de inserção alterou o estado da visão.
  3. Co valor 6, por esse ser o novo número de tuplas da tabela de base da visão.
  4. Dum erro, pois visões não aceitam inserções diretamente.
  5. Euma tabela vazia, pois a última inserção desconfigura a condição-alvo da visão.
Revelar gabarito e comentário

GabaritoA — o valor 3, dado que a visão permanece selecionando tuplas de clientes do estado ‘RJ’.

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Visões (Views) em SQL: Inserção e Filtragem

Gabarito: letra A. Após a inserção na visão v_clientes_rj de uma linha com estado 'MG', a linha é adicionada à tabela base, mas não aparece na visão, pois esta filtra apenas linhas com estado = 'RJ'. Portanto, o count(*) retorna 3, mantendo as três linhas originais (IDs 1, 3 e 5) que atendem à condição.

O comando CREATE VIEW define uma visão como uma consulta armazenada. Quando se insere em uma visão simples (baseada em uma única tabela, sem junções, agregações ou WITH CHECK OPTION), o comando é traduzido para um INSERT na tabela base. A linha inserida é adicionada à tabela, mas se não atender à condição WHERE da visão, ela simplesmente não aparece quando a visão é consultada.

NÃO CAIA NESSA!

Muitos candidatos pensam que a inserção em uma visão é automaticamente visível na visão, ou que a visão seria alterada para incluir a nova linha mesmo com estado diferente. Na verdade, sem WITH CHECK OPTION, o SGBD insere a linha na tabela base, mas a visão filtra-a, mantendo seu resultado inalterado. A pegada está em entender que a visão não é uma tabela separada, mas sim uma "janela" sobre os dados.


Comando / Situação

Efeito na Tabela Base tb_cliente

Efeito na Visão v_clientes_rj

Resultado de SELECT count(*) FROM v_clientes_rj

INSERT inicial (5 linhas)

5 linhas inseridas (IDs 1 a 5)

Visão ainda não existe

UPDATE ... SET estado='RJ' WHERE id_cliente%2!=0

IDs 1, 3, 5 atualizados para 'RJ'; IDs 2, 4 permanecem com estado nulo

Visão ainda não existe

CREATE VIEW v_clientes_rj AS ... WHERE estado = 'RJ'

Tabela base inalterada (5 linhas)

Visão contém as 3 linhas com estado 'RJ' (IDs 1, 3, 5)

3

INSERT INTO v_clientes_rj VALUES (6,'cli6','6666','MG')

Linha com ID 6 e estado 'MG' adicionada à tabela base (total: 6 linhas)

Visão não inclui a nova linha, pois estado = 'MG' não atende ao filtro WHERE estado = 'RJ'

3 (inalterado)

  1. 1Cria tabela basetb_cliente
  2. 2UPDATE estado='RJ'IDs ímpares
  3. 3CREATE VIEW v_clientes_rjWHERE estado='RJ'
  4. 4INSERT na visãoestado='MG'
  5. 5SELECT count(*)Resultado: 3
LEVEL · soulevel.com.br

Alternativa A — ✅ Correta ⟵ GABARITO

A visão v_clientes_rj seleciona apenas linhas com estado = 'RJ'. Após o INSERT de uma linha com estado 'MG', essa linha não entra na visão, que continua com as três tuplas originais (IDs 1,3,5). Portanto, count(*) retorna 3.

Alternativa B — ❌ Incorreta

A inserção não altera o estado da visão; ela acrescenta uma linha à tabela base, mas a visão permanece com o mesmo WHERE. O valor 4 seria o número de linhas se a nova linha também tivesse estado 'RJ', o que não ocorre.

Alternativa C — ❌ Incorreta

O count é sobre a visão, não sobre a tabela base. A tabela base passa a ter 6 linhas, mas a visão exibe apenas as que satisfazem estado = 'RJ', ou seja, 3.

Alternativa D — ❌ Incorreta

Visões simples (que não envolvem junções, agregações ou WITH CHECK OPTION) aceitam inserções diretamente, desde que a visão seja atualizável. O comando executado é válido e insere a linha na tabela base, sem erro.

Alternativa E — ❌ Incorreta

A condição da visão não é "desconfigurada" pela inserção; ela permanece inalterada. A nova linha, por ter estado 'MG', simplesmente não é selecionada pela visão, que continua contendo as linhas com 'RJ'.

Conclusão: A resposta correta é a letra A.

Link permanente: /questoes/fg091421