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子句条件用于限制要更新的行。
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表中工作。
首先,无涯教程将创建两个名为 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查询以验证数据,如下图所示:
表: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查询以验证数据,如下图所示:
假设无涯教程要根据雇员的表现来更新他们的工资。可以使用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子句之后指定了Employees表。这是因为只想更改Employees表中的记录,而不要同时更改两个表中的记录。
要了解使用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);
由于这些员工是新员工,因此他们的绩效记录不可用。请参见以下输出:
如果无涯教程要更新新雇用员工的薪水,则不能使用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语句,该语句能够使用JOIN子句条件,用另一个表中的新数据来更改一个表中的现有数据。当无涯教程需要修改WHERE子句中指定的某些列以及使用INNER JOIN或LEFT JOIN子句时,此查询很有用。
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)
Python实战 · 从0到1搭建直播视频平台 -〔Barry〕