MySQL - Update Join

MySQL - Update Join 首页 / MySQL入门教程 / MySQL - Update Join

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

语句中使用MySQL中的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语法中:

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

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

举一些例子来了解UPDATE JOIN语句如何在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查询以验证数据,如下图所示:

MySQL Update Join

表:Employees

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

使用INNER JOIN的UPDATE JOIN示例

假设无涯教程要根据雇员的表现来更新他们的工资。可以使用UPDATE INNER JOIN语句在Employees表中更新员工的薪水,因为绩效 percentage 存储在绩效表中。

在上面的表中,必须使用 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表中的记录,而不要同时更改两个表中的记录。

使用LEFT JOIN的UPDATE JOIN示例

要了解使用LEFT JOIN的UPDATE JOIN,无涯教程首先需要在Employees表中插入两行:

链接:https://www.learnfk.comhttps://www.learnfk.com/mysql/mysql-update-join.html

来源:LearnFk无涯教程网

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子句时,此查询很有用。

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

WebAssembly入门课 -〔于航〕

跟着高手学复盘 -〔张鹏〕

高楼的性能工程实战课 -〔高楼〕

Go 语言项目开发实战 -〔孔令飞〕

超级访谈:对话张雪峰 -〔张雪峰〕

徐昊 · TDD项目实战70讲 -〔徐昊〕

技术领导力实战笔记 2022 -〔TGO 鲲鹏会〕

云原生架构与GitOps实战 -〔王炜〕

Python实战 · 从0到1搭建直播视频平台 -〔Barry〕

好记忆不如烂笔头。留下您的足迹吧 :)