Uma tabela de banco de dados denominada TT, com atributos A ...
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:
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