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.
GO TO FULL VERSION