CodeGym /Curso Java /SQL & Hibernate /Alterando dados em uma tabela

Alterando dados em uma tabela

SQL & Hibernate
Nível 6 , Lição 3
Disponível

4.1 Instrução UPDATE SET

Se você precisar alterar os registros existentes na tabela, para isso usamos o operador UPDATE.

Por um lado, o operador UPDATEé semelhante ao operador INSERT, pois precisamos especificar novos valores para as colunas. E por outro lado, no operador SELECT, porque permite trabalhar imediatamente com grupos de dados.

Importante! O objetivo do operador UPDATEé alterar os dados não em uma linha da tabela, mas em todas as linhas que atendem a uma determinada condição. E se você cometer um pequeno erro, poderá facilmente perder todos os dados da tabela.

Visão geral do pedido:

UPDATE table SET
  	column 1 = expression 1,
  	column 2 = expression 2,
  	column 3 = expression 3
WHERE condition;

Vamos escrever uma consulta que aumentará o salário de todos os nossos funcionários em 100. Nossa consulta ficará assim:

UPDATE employee SET
  	salary = salary+100;

E agora para todos que têm salário inferior a 50 mil, também vamos aumentar em 20%. Exemplo de pedido:

UPDATE employee SET
  	salary = salary*1.2
WHERE salary<50000;

E claro, vamos aumentar o salário do diretor em 2 vezes, como seria sem ele:

UPDATE employee SET
  	salary = salary*2
WHERE id=4;

4.2 Cenários complexos de mudança de dados

Se você decidir alterar dados em várias tabelas ao mesmo tempo, ou quando alterar dados em uma tabela, precisará preenchê-la com dados de outra ou simplesmente usar dados de outra tabela no processo de alteração da primeira, então surpresas nos esperam.

Vamos tentar alterar o nível de todos os usuários da tabela de usuários que existem na tabela de funcionários. Para simplificar, verificaremos a coincidência dos usuários pelo nome.

Como gostaríamos de escrever esta consulta:

UPDATE user SET
  	level = 80,
WHERE user . name IN ( list of names from employee table );

Bem, vamos adicionar uma lista de nomes da tabela de funcionários a esta consulta:

UPDATE user SET
  	level = 80,
WHERE user.name IN (select name from employee);

Interessante! A própria consulta SQL para obter os nomes acabou sendo ainda mais curta do que a descrição da tarefa. Os criadores do SQL não comeram seu pão em vão.

Forçado a aborrecê-lo -essa abordagem não vai funcionar. Primeiro você precisa juntar essas tabelas, ficará mais ou menos assim:

UPDATE table 1, table 2 SET
  	column 1 = expression 1,
  	column 2 = expression 2,
  	column 3 = expression 3
WHERE table 1.id = table 2.ref_id;

Vamos dificultar um pouco. Você precisa definir o nível para 80 apenas para bons funcionários cujo salário seja superior a 50 mil. A solução completa ficará assim:

UPDATE user, good_employees SET
  	user.level = 80
WHERE user.name = good_employees.name;

Essa junção de tabelas é realmente INNER JOIN, de modo que, no final, apenas os usuários que tiverem uma correspondência de nome na segunda tabela permanecerão.

Mas ainda precisamos selecionar bons funcionários de alguma forma, então vamos adicionar mais algum código:

SELECT * FROM employee WHERE salary >= 50000

E agora substituímos esta tabela em nossa consulta final:

UPDATE user,
    (SELECT * FROM employee WHERE salary >= 50000) good_emps
SET
    user.level = 80
WHERE user.name = good_emps.name;

Viva com isso agora.

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION