MySQL UPDATE JOIN

MySQL UPDATE JOIN

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

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

UPDATE JOIN是一个MySQL语句,用于执行跨表更新操作,这意味着我们可以使用JOIN子句条件更新一个表中的数据,并使用另一个表。此查询根据 主键外键 以及指定的连接条件来更新和修改数据。我们可以使用 UPDATE查询 同时更新一个或多个列。

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

语法

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

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 JOIN或LEFT JOIN,它们紧随在UPDATE子句之后,然后是ON关键字后指定的连接谓词。然后,我们需要为Tab1和/或Tab2中的列赋予新值,以修改表。最后,WHERE子句条件用于限制更新的行数。

MySQL中的UPDATE JOIN是如何工作的?

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

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

以上的UPDATE语句产生与使用INNER JOIN或LEFT JOIN子句的UPDATE JOIN相同的结果。这意味着我们可以将上述语法重新编写为上面显示的UPDATE JOIN语法:

UPDATE Tab1,Tab2
INNER JOIN Tab2 ON Tab1.C1 = Tab2.C1
SET Tab1.C2 = Taba2.C2, Tab2.C3 = expression
WHERE condition

让我们通过一些例子来理解在MySQL表中如何使用UPDATE JOIN语句。

UPDATE JOIN示例

首先,我们将创建两个表,分别命名为 PerformanceEmployee ,并且这两个表通过外键相关联。在这里,“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查询以验证数据,如下图所示:

MySQL UPDATE JOIN

表格:员工信息

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 UPDATE JOIN

更新与内连接示例的JOIN

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

在上述表中,我们必须使用performance字段来连接Employees和Performance表。请看下面的查询:

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

执行上述语句后,我们将获得下面的输出,在这里我们可以看到员工的薪水列已成功更新。

MySQL UPDATE JOIN

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

查询将在“Employees”表中的每一行对performance列的值与“Performance”表中的performance列进行匹配。如果它匹配performance列,它将获取Performance表中的百分比并更新Employees表的salary列。这个查询会更新Employees表中的所有记录,因为我们在UPDATE JOIN查询中没有指定WHERE子句。

UPDATE JOIN with LEFT JOIN示例

为了理解使用LEFT JOIN的UPDATE JOIN,我们首先需要向Employees表中插入两行新记录:

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

由于这些员工是新招聘的,所以他们的业绩记录尚不可用。请参见下面的输出:

MySQL UPDATE JOIN

如果我们想要更新新雇员的薪水 ,我们不能使用UPDATE INNER JOIN查询。这是因为在Performance表中没有他们的绩效数据。因此,我们将使用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

在本文章中,我们学习了MySQL Update Join语句,它允许我们使用JOIN子句条件将另一个表中的新数据修改到一张表中的现有数据。当我们需要修改在WHERE子句中指定的特定列,并且同时使用INNER JOIN或LEFT JOIN子句时,这个查询是有优势的。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程