1
resposta

[Dúvida] Sobre esse exemplo de update com exists

Não conhecia o comando exists e acompanhei a explicação e os exercícios. Porém, nesse exemplo que o Vitorino deu

UPDATE VENDEDORES V SET V.FERIAS =
(SELECT TVF.DE_FERIAS FROM TABELA_DE_VENDEDORES_FONTE TVF
WHERE V.MATRICULA = SUBSTR(TVF.MATRICULA, 3, 3))
WHERE EXISTS
(SELECT 1 FROM TABELA_DE_VENDEDORES_FONTE TVF
WHERE V.MATRICULA = SUBSTR(TVF.MATRICULA, 3, 3));

o comando EXISTS é desncessário pois

UPDATE VENDEDORES V SET V.FERIAS =
(SELECT TVF.DE_FERIAS FROM TABELA_DE_VENDEDORES_FONTE TVF
WHERE V.MATRICULA = SUBSTR(TVF.MATRICULA, 3, 3))

faz EXATAMENTE a mesma coisa!!

Então, acho que não entendi direito a sua aplicação e gostaria de um exemplo em que ele fosse realmente necessário para o update acontecer. Obrigada

1 resposta

Oi! Como você está?

Peço desculpas pela demora em te responder.

A condição EXISTS não será estritamente necessária para um update específico acontecer. Assim como em outras linguagens, em SQL temos muitas formas possíveis de chegar a um mesmo resultado. Tendo isso em vista, a condição EXISTS pode ser bastante útil quando não conhecemos todos os parâmetros que temos na tabela que estamos buscando e/ou comparando os dados.

Na query desenvolvida na aula, o instrutor faz a demonstração com a intenção didática de que possamos compreender "por baixo dos panos" o que acontece ao utilizarmos esse comando.

Para compreendê-lo ainda melhor, podemos consultar a documentação oficial, que diz o seguinte:

O operador EXISTS verifica se a sequência retornada por sua expressão de entrada está vazia ou não e retorna falso ou verdadeiro, respectivamente. Um caso especial é quando a expressão de entrada retorna NULL. Nesse caso, EXISTS também retornará NULL, a menos que se saiba que a expressão de entrada sempre retornará pelo menos um item, caso em que EXISTS retornará true.

Quando aliamos a condição EXISTS a um UPDATE, a atualização será feita nos valores que retornarem true (1) naquela subquery em que a condição está. Mesmo que apenas um registro seja verdadeiro, o retorno do EXISTS será true e as atualizações serão aplicadas a esses registros. Ela é útil quando precisamos principalmente saber sobre a existência de valores em uma determinada tabela, mais do que os valores em si.

Espero que tenha ficado mais claro. Abraços.