Questão de Banco de Dados — SQL — FGV 2023
- Código
- fg061608
- Banca
- FGV
- Órgão
- Câmara dos Deputados
- Ano
- 2023
- Nível
- Superior
- Cargo
- Analista Legislativo - Informática Legislativa - Tarde



- A1.
- B2.
- C3.
- D4.
- E5.



GabaritoC — 3.
Gabarito: letra C — a conta chega a 1 execução — alternativa A.
O comando INSERT ... SELECT insere em uma tabela todas as linhas retornadas por uma consulta SELECT. Quando a tabela tem uma restrição de unicidade (como uma chave primária), as linhas que já existem são ignoradas — o comando não falha, apenas não insere duplicatas. Isso significa que cada execução só consegue adicionar as linhas que ainda não estão presentes.
A quantidade de execuções necessárias depende de quantas linhas faltam e de como o comando se comporta com a restrição. Se faltam N linhas e cada execução insere apenas as linhas que ainda não existem, o número de execuções é igual ao número de linhas faltantes, desde que o SELECT retorne todas as linhas originais. A restrição de unicidade é o que impede a inserção de duplicatas e força essa contagem.
Esta questão cobra exatamente esse comportamento: comparar a instância original com a corrente, descobrir quantas linhas foram perdidas e entender que cada execução do INSERT ... SELECT só consegue inserir as linhas que ainda não existem, exigindo uma execução por linha faltante.
tabela original com 10 linhas
instância corrente com 7 linhas
comando: INSERT ... SELECT
restrição de unicidade na coluna enumerada
O que queremos: o número mínimo de execuções do comando para restaurar a instância original
O comando INSERT ... SELECT só consegue inserir linhas que ainda não existem na tabela, por causa da restrição de unicidade. Então, o número de execuções necessárias é exatamente o número de linhas que foram perdidas. Primeiro precisamos saber quantas são.
Por que esta fórmula: A quantidade de linhas faltantes é a diferença entre o total original e o total atual.
De onde vem cada valor: = enunciado: 10 linhas · = enunciado: 7 linhas
Confundir e contar as linhas que existem (7) em vez das que faltam (3).
Sabemos que faltam 3 linhas. Cada execução do INSERT ... SELECT tenta inserir todas as linhas retornadas pelo SELECT, mas a restrição de unicidade faz com que apenas as linhas que ainda não existem sejam realmente inseridas. Como o SELECT retorna as 10 linhas originais, a primeira execução insere as 3 que faltam e ignora as 7 que já existem. Na segunda execução, todas as 10 já existem, então nada é inserido. Portanto, uma única execução já restauraria a tabela.
Achar que cada execução insere apenas uma linha por vez, mas na verdade insere todas as que faltam de uma só vez.
Resposta: 1 execução — alternativa A
Link permanente: /questoes/fg061608