Uma tabela de banco de dados denominada TT, com atributos A ...

Próximas questões
Com base no mesmo assunto
Q873282 Banco de Dados
Uma tabela de banco de dados denominada TT, com atributos A e B, contém em sua instância seis registros, com os seguintes valores: 1,2 2,3 3,4 3,7 4,3 2,3
O número de registros alterados pela execução do comando update TT set b = b + 1 where TT.a in (select b FROM TT) seria:
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Alternativa correta: E - 5.

A questão aborda o conceito de atualização de dados em um banco de dados SQL. A instrução UPDATE é utilizada para modificar registros existentes em uma tabela, e podemos aplicar condições específicas para determinar quais registros serão atualizados através da cláusula WHERE. Neste caso, a condição para atualizar o valor do atributo B é que o valor de A na tabela TT esteja presente na subconsulta (SELECT B FROM TT). Esta subconsulta produz uma lista dos valores existentes para o atributo B na tabela.

Para resolver a questão, precisamos entender que a subconsulta (SELECT B FROM TT) retornará os valores 2, 3, 4, 7, porque são estes os valores presentes no atributo B. De seguida, precisamos analisar os valores do atributo A e verificar quais estão presentes nessa lista. Os valores de A que correspondem são 2, 3, 3, 4. Note que o valor 3 aparece duas vezes, mas como a atualização é por registro e não por valor distinto, cada ocorrência será considerada na contagem de alterações.

A operação SET B = B + 1 irá incrementar em 1 o valor do atributo B dos registros que atendem à condição. Como temos quatro registros que atendem à condição (2, 3, 3, 4), você poderia pensar que apenas quatro registros seriam alterados. No entanto, observe que o registro com valores 3, 4 aparece duas vezes, significando que há, na verdade, cinco registros que serão afetados pela operação de atualização.

Portanto, o comando UPDATE alterará cinco registros, tornando a alternativa E a correta. O conhecimento envolvido inclui compreensão do comando UPDATE com cláusula WHERE, e a habilidade de interpretar subconsultas e a maneira como elas interagem com a consulta principal.

Aqui está um resumo visual dos registros que serão atualizados:

  • A = 2, B = 3 (atende à condição, pois 2 está na lista retornada pela subconsulta)
  • A = 3, B = 4 (atende à condição, 3 está na lista, e este registro aparece duas vezes)
  • A = 3, B = 7 (não atende à condição, 3 está na lista, mas não alteraremos o valor de B aqui pois estamos olhando para os valores de A)
  • A = 4, B = 3 (atende à condição, 4 está na lista)

Com isso, confirmamos que a resposta correta é a alternativa E, com um total de cinco registros sendo afetados pelo comando UPDATE.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

 update TT set b = b + 1

 

  * Levei mais em consideração a cláusula abaixo

 where TT.a in (select b FROM TT)

 

 

Por parte:

select b FROM TT

2

3

4

7

3

3

 

Registros de TT.a que estão na cláusula acima

2 3 3 4 2  (total 5 registros)

 

 

Letra E

Não iria impactar em todos os registros ? Os seis registros ? 

Como o select trás todos os seis registros. select b FROM TT

Colega João, como o colega Rodrigo explicou abaixo, sim o segundo select traz os seis registros ( 2,3,4,7,3,3), porém observe que a primeira linha de  TT.a (valor 1) NÃO ESTÁ CONTIDA NA LISTA, portanto não será atualizado, por isso será atualizado um total de 5 registros.

GABARITO ALTERNATIVA E

@MAX Q, obrigado pela explicação!

questoes com subqueries sao mais faceis de resolver de dentro para fora.

1- determinar retorno subquery

select b from tt:

2

3

4

7

3

3

2- ver rows q vao tomar update:

o IN em sql bate a coluna espeifcida com cada registro retornado da subquery. compara tt.a com todos registros de B, 1 por 1. basta 1 registr A ter pelo menos um registro identico em B em qualquer tupla para validar a verificação imposta pelo IN. como A so tem um valor nao presente em B (1° tupla = 1), somente essa row nao vai ter update. as outras 5 sim

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo