MySQL Update Join更新连接

MySQL 中的 UPDATE 查询是用于修改表数据的 DML 语句。UPDATE 查询必须需要 SET 和 WHERE 子句。SET 子句用于更改 WHERE 子句中指定的列的值。

MySQL 中的 JOIN 子句在语句中用于通过在单个查询中连接多个表来检索数据。

UPDATE JOIN 是用于执行跨表更新的 MySQL 语句,这意味着我们可以使用带有 JOIN 子句条件的另一个表来更新一个表。此查询根据PRIMARY KeyFOREIGN Key以及指定的连接条件更新和更改多个表连接的数据。我们可以使用UPDATE 查询一次更新单个或多个列。

注意: MySQL UPDATE JOIN 语句从 4.0 或更高版本开始受支持。

一、MySQL Update Join 语法

以下是 UPDATE JOIN 语句将记录修改到 MySQL 表中的基本语法:

UPDATE Tab1, Tab2, [INNER JOIN | LEFT JOIN] Tab1 ON Tab1.C1 = Tab2.C1  
SET Tab1.C2 = Tab2.C2, Tab2.C3 = expression  
WHERE Condition; 

在上面的 MySQL UPDATE JOIN 语法中:

首先,我们在 UPDATE 子句之后指定了两个表:主表 (Tab1) 和另一个表 (tab2)。在 UPDATE 子句之后,需要指定至少一个表。接下来,我们指定了JOIN 子句的类型,即INNER JOINLEFT JOIN,它们出现在 UPDATE 子句之后,然后是在 ON 关键字之后指定的连接谓词。然后,我们必须将新值分配给 Tab1 和/或 Tab2 中的列,以便修改到表中。最后,WHERE 子句条件用于限制更新行。

二、UPDATE JOIN 在 MySQL 中是如何工作的?

MySQL中的 UPDATE JOIN 工作过程与上述语法中描述的相同。但有时,我们会发现这个查询单独执行了跨表更新,而不涉及任何连接。以下语法是使用另一个表更新一个表的另一种方法:

UPDATE Tab1, Tab2,   
SET Tab1.C2 = Tab2.C2, Tab2.C3 = expression   
WHERE Tab1.C1 = Tab2.C1 AND condition;  

让我们举一些例子来了解 UPDATE JOIN 语句在 MySQL 表中是如何工作的。

三、MySQL Update Join 示例

首先,我们将创建两个名为Performance和Employee的表,这两个表通过外键关联。这里,“Performance”是父表,“Employees”是子 表。以下脚本将创建两个表及其记录。

Performance表:

CREATE TABLE Performance (  
    performance INT(11) NOT NULL,  
    percentage FLOAT NOT NULL,  
    PRIMARY KEY (performance)  
);  

接下来,使用 INSERT 语句填充表中的记录。

INSERT INTO Performance (performance, percentage)  
VALUES(101,0),  
      (102,0.01),  
      (103,0.03),  
      (104,0.05),  
      (105,0.08);  

然后,执行 SELECT 查询以验证数据,如下图所示:

Employee表:

CREATE TABLE Employees (  
    id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,  
    name VARCHAR(255) NOT NULL,  
    performance INT(11) DEFAULT NULL,  
    salary FLOAT DEFAULT NULL,  
    CONSTRAINT fk_performance FOREIGN KEY (performance) REFERENCES Performance (performance)  
);  

接下来,使用 INSERT 语句填充表中的记录。

INSERT INTO Employees (name, performance, salary)        
VALUES('Mary', 101, 55000),  
      ('John', 103, 65000),  
      ('Suzi', 104, 85000),  
      ('Gracia', 105, 110000),  
      ('Nancy Johnson', 103, 95000),  
      ('Joseph', 102, 45000),  
      ('Donald', 103, 50000); 

然后,执行 SELECT 查询以验证数据,如下图所示:

四、MySQL INNER JOIN 和 Update Join 同时使用

假设我们想根据员工的表现更新员工的薪水。我们可以使用 UPDATE INNER JOIN 语句更新员工表中员工的薪水,因为绩效百分比存储在绩效表中。

在上面的表格中,我们必须使用绩效字段来连接员工和绩效表。请参阅以下查询:

UPDATE Employees e  
INNER JOIN Performance p   
ON e.performance = p.performance  
SET salary = salary + salary * percentage; 

执行上述语句后,我们会得到下面的输出,其中我们可以看到员工的工资列更新成功。

让我们了解这个查询在 MySQL 中是如何工作的。在查询中,我们只在 UPDATE 子句之后指定了Employees 表。这是因为我们只想更改Employees 表中的记录,而不是两个表中的记录。

该查询根据“Performance”表的绩效列检查“员工”表中每一行的绩效列值。如果它会得到匹配的绩效列,那么它将获取绩效表中的百分比并更新员工表的薪水列。该查询更新了Employees 表中的所有记录,因为我们没有在UPDATE JOIN 查询中指定WHERE 子句。

五、MySQL INNER JOIN 和 Update Join 使用示例

为了理解 UPDATE JOIN 和 LEFT JOIN,我们首先需要在Employees 表中插入两个新行:

INSERT INTO Employees (name, performance, salary)  
VALUES('William', NULL, 73000),  
      ('Rayan', NULL, 92000);  

由于这些员工是新员工,因此他们的绩效记录不可用。请参阅以下输出:

如果我们想更新新雇员的薪水,我们不能使用 UPDATE INNER JOIN 查询。这是因为他们的性能数据在性能表中不可用。因此,我们将使用 UPDATE LEFT JOIN 语句来满足这一需求。

MySQL 中的 UPDATE LEFT JOIN 语句用于在另一个表的对应行中没有找到记录时更新表中的一行。

例如,如果我们想将新聘员工的工资提高 2.5%,我们可以借助以下语句来做到这一点:

UPDATE Employees e  
LEFT JOIN Performance p   
ON e.performance = p.performance   
SET salary = salary + salary * 0.025  
WHERE p.percentage IS NULL;  

执行上述查询后,我们将得到如下图的输出,其中我们可以看到新入职员工的工资已成功更新。

在本文中,我们学习了 MySQL Update Join 语句,该语句允许我们使用 JOIN 子句条件将另一个表中的新数据更改为一个表中的现有数据。当我们需要修改 WHERE 子句中指定的某些列以及使用 INNER JOIN 或 LEFT JOIN 子句时,此查询非常有用。

热门文章

优秀文章