JUNTE-SE À ATUALIZAÇÃO DO MySQL

Resumo : neste tutorial, você aprenderá como usar a instrução MySQL UPDATE JOIN para realizar a atualização entre tabelas. Mostraremos passo a passo como usar INNER JOIN  cláusula e LEFT JOIN  cláusula com a UPDATEinstrução.

Sintaxe MySQL UPDATE JOIN

Freqüentemente, você usa junções para consultar linhas de uma tabela que possui (no caso de INNER JOIN) ou não (no caso de LEFT JOIN) linhas correspondentes em outra tabela.

No MySQL, você também pode usar as JOINcláusulas da UPDATEinstrução para atualizar linhas em uma tabela com base nos valores de outra tabela. A UPDATE JOINinstrução é útil quando você precisa modificar dados em tabelas relacionadas.

A sintaxe do MySQL UPDATE JOIN  é a seguinte:

UPDATE T1
[INNER JOIN | LEFT JOIN] T2 ON T1.C1 = T2.C1
SET T1.C2 = T2.C2, 
    T2.C3 = expr
WHERE condition;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Como funciona:

  • Primeiro, especifique a tabela que deseja atualizar após a palavra-chave UPDATE ( T1).
  • Segundo, use INNER JOIN  ou LEFT JOIN  e um predicado de junção. A JOINcláusula deve aparecer logo após a UPDATEcláusula.
  • Terceiro, atribua novos valores às colunas da T1tabela cujos dados você deseja atualizar.
  • Por fim, especifique uma condição na WHEREcláusula para filtrar as linhas para atualização.

Se você seguir o UPDATEtutorial de instruções, notará que há outra maneira de atualizar os dados nas tabelas usando a seguinte sintaxe:

UPDATE T1
SET T1.c2 = T2.c2,
    T2.c3 = expr
WHERE T1.c1 = T2.c1 AND condition;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Esta UPDATEdeclaração funciona da mesma forma  UPDATE JOIN  que uma cláusula implícita INNER JOIN  . Isso significa que você pode reescrever a afirmação acima da seguinte forma:

UPDATE T1
INNER JOIN T2 ON T1.C1 = T2.C1
SET T1.C2 = T2.C2,
      T2.C3 = expr
WHERE condition;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Exemplos de UPDATE JOIN do MySQL

Vamos explorar alguns exemplos de uso da UPDATE JOIN  declaração para uma melhor compreensão.

Criaremos um novo banco de dados chamado hrque consiste em duas tabelas:

  • employeestabela armazena dados de funcionários com identificação, nome, desempenho e salário do funcionário.
  • A meritstabela armazena o desempenho dos funcionários e a porcentagem de mérito.

As instruções a seguir criam e carregam dados no hrbanco de dados de amostra:

CREATE DATABASE IF NOT EXISTS hr;
USE hr;
CREATE TABLE merits (
  performance INT PRIMARY KEY, 
  percentage DEC(5, 2) NOT NULL
);
CREATE TABLE employees (
  emp_id INT AUTO_INCREMENT PRIMARY KEY, 
  emp_name VARCHAR(255) NOT NULL, 
  performance INT DEFAULT NULL, 
  salary DEC(5, 2) DEFAULT NULL, 
  FOREIGN KEY (performance) REFERENCES merits (performance)
);
INSERT INTO merits(performance, percentage) 
VALUES 
  (1, 0), 
  (2, 0.01), 
  (3, 0.03), 
  (4, 0.05), 
  (5, 0.08);
INSERT INTO employees(emp_name, performance, salary) 
VALUES 
  ('Mary Doe', 1, 50000), 
  ('Cindy Smith', 3, 65000), 
  ('Sue Greenspan', 4, 75000), 
  ('Grace Dell', 5, 125000), 
  ('Nancy Johnson', 3, 85000), 
  ('John Doe', 2, 45000), 
  ('Lily Bush', 3, 55000);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Exemplo MySQL UPDATE JOIN com cláusula INNER JOIN

Suponha que você queira aumentar o salário de cada funcionário em uma porcentagem com base em seu desempenho.

A instrução a seguir atualiza a salarycoluna da employeestabela executando um procedimento INNER JOINcom a meritstabela com base nos valores correspondentes na performancecoluna:

UPDATE 
  employees 
  INNER JOIN merits ON employees.performance = merits.performance 
SET 
  salary = salary + salary * percentage;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

Query OK, 6 rows affected (0.01 sec)
Rows matched: 7  Changed: 6  Warnings: 0Linguagem de código:  CSS  ( css )

Como funciona a consulta:

  • UPDATE funcionários: Especifica que queremos atualizar a employeestabela.
  • INNER JOIN merits ON empregados.desempenho = méritos.desempenho: Executa um INNER JOIN com a meritstabela com base na condição de que os performancevalores da coluna correspondam entre as tabelas employeese merits. Isso significa que apenas as linhas com valores de desempenho correspondentes em ambas as tabelas serão consideradas para a atualização.
  • SET salário = salário + salário * percentual: Atualiza a salarycoluna da employeestabela. O salário de cada funcionário é atualizado com base no percentual: salary + salary * percentage.

Como a UPDATEinstrução não possui a WHEREcláusula, ela atualiza todas as linhas employeesda tabela.

A instrução a seguir recupera dados da employeestabela para verificar as atualizações:

SELECT * FROM employees;

Saída:

+--------+---------------+-------------+--------+
| emp_id | emp_name      | performance | salary |
+--------+---------------+-------------+--------+
|      1 | Mary Doe      |           1 |  50000 |
|      2 | Cindy Smith   |           3 |  66950 |
|      3 | Sue Greenspan |           4 |  78750 |
|      4 | Grace Dell    |           5 | 135000 |
|      5 | Nancy Johnson |           3 |  87550 |
|      6 | John Doe      |           2 |  45450 |
|      7 | Lily Bush     |           3 |  56650 |
+--------+---------------+-------------+--------+
7 rows in set (0.00 sec)Linguagem de código:  JavaScript  ( javascript )

Exemplo de UPDATE JOIN do MySQL com LEFT JOIN

Suponha que a empresa contrate mais dois funcionários:

INSERT INTO employees(emp_name, performance, salary) 
VALUES 
  ('Jack William', NULL, 43000), 
  ('Ricky Bond', NULL, 52000);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Como esses funcionários são novos contratados, seus dados de desempenho não estão disponíveis ou NULL:

+--------+---------------+-------------+--------+
| emp_id | emp_name      | performance | salary |
+--------+---------------+-------------+--------+
|      1 | Mary Doe      |           1 |  50000 |
|      2 | Cindy Smith   |           3 |  66950 |
|      3 | Sue Greenspan |           4 |  78750 |
|      4 | Grace Dell    |           5 | 135000 |
|      5 | Nancy Johnson |           3 |  87550 |
|      6 | John Doe      |           2 |  45450 |
|      7 | Lily Bush     |           3 |  56650 |
|      8 | Jack William  |        NULL |  43000 |
|      9 | Ricky Bond    |        NULL |  52000 |
+--------+---------------+-------------+--------+
9 rows in set (0.00 sec)Linguagem de código:  PHP  ( php )

Para aumentar o salário de novas contratações, não é possível utilizar o UPDATE INNER JOINextrato porque seus dados de desempenho não estão disponíveis na meritstabela. É aqui que a UPDATE LEFT JOINdeclaração vem em socorro.

A UPDATE LEFT JOIN  instrução atualiza uma linha em uma tabela quando ela não possui uma linha correspondente em outra tabela.

Por exemplo, você pode aumentar o salário de uma nova contratação em 1,5% usando a seguinte declaração:

UPDATE 
  employees 
  LEFT JOIN merits ON employees.performance = merits.performance 
SET 
  salary = salary + salary * 0.015 
WHERE 
  merits.percentage IS NULL;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

Query OK, 2 rows affected (0.00 sec)
Rows matched: 2  Changed: 2  Warnings: 0Linguagem de código:  CSS  ( css )

A instrução a seguir recupera os dados dos funcionários para verificar as atualizações:

SELECT * FROM employees;

Saída:

+--------+---------------+-------------+--------+
| emp_id | emp_name      | performance | salary |
+--------+---------------+-------------+--------+
|      1 | Mary Doe      |           1 |  50000 |
|      2 | Cindy Smith   |           3 |  66950 |
|      3 | Sue Greenspan |           4 |  78750 |
|      4 | Grace Dell    |           5 | 135000 |
|      5 | Nancy Johnson |           3 |  87550 |
|      6 | John Doe      |           2 |  45450 |
|      7 | Lily Bush     |           3 |  56650 |
|      8 | Jack William  |        NULL |  43645 |
|      9 | Ricky Bond    |        NULL |  52780 |
+--------+---------------+-------------+--------+
9 rows in set (0.00 sec)Linguagem de código:  PHP  ( php )

Resumo

  • Use o MySQL UPDATE JOIN  com as cláusulas INNER JOIN  ou LEFT JOIN  para realizar atualizações entre tabelas.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *