Mysql 简明教程

MySQL - Update Join

若要使用 MySQL 更新单个数据库表中输入的数据,可以使用 UPDATE 语句。但是,若要更新多个数据库表中的数据,我们可以使用 UPDATE…​ JOIN 语句。

MySQL UPDATE…​ JOIN

通常,MySQL 中的 ` JOINS ` 用来提取来自多张表的行的组合,相对于匹配字段。并且,由于 ` UPDATE ` 语句仅修改单个表中的数据,所以我们使用 JOIN 将多张表组合到一张表中,然后更新它们。这也称为跨表修改。

Syntax

以下是 UPDATE…​ JOIN 语句的基本语法:

UPDATE table(s)
SET column1 = value1, column2 = value2, ...
FROM table1
JOIN table2 ON column3 = column4;

Example

让我们首先创建一个名为 CUSTOMERS 的表,其中包含客户的个人详细信息,包括姓名、年龄、住址和薪水等。

CREATE TABLE CUSTOMERS (
   ID INT NOT NULL,
   NAME VARCHAR (20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

现在使用 INSERT 语句向该表中插入值,如下所示:

INSERT INTO CUSTOMERS VALUES
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ),
(2, 'Khilan', 25, 'Delhi', 1500.00 ),
(3, 'Kaushik', 23, 'Kota', 2000.00 ),
(4, 'Chaitali', 25, 'Mumbai', 6500.00 ),
(5, 'Hardik', 27, 'Bhopal', 8500.00 ),
(6, 'Komal', 22, 'Hyderabad', 4500.00 ),
(7, 'Muffy', 24, 'Indore', 10000.00 );

CUSTOMERS 表将创建为 −

让我们创建另一个名为 ORDERS 的表,其中包含所做的订单和下单日期的详细信息。

CREATE TABLE ORDERS (
   OID INT NOT NULL,
   DATE VARCHAR (20) NOT NULL,
   CUSTOMER_ID INT NOT NULL,
   AMOUNT DECIMAL (18, 2)
);

使用 INSERT 语句像下面这样向该表中插入值:

INSERT INTO ORDERS VALUES
(102, '2009-10-08 00:00:00', 3, 3000.00),
(100, '2009-10-08 00:00:00', 3, 1500.00),
(101, '2009-11-20 00:00:00', 2, 1560.00),
(103, '2008-05-20 00:00:00', 4, 2060.00);

ORDERS 表显示如下:

使用以下 ` UPDATE…​ JOIN ` 查询交叉修改多张表 (CUSTOMERS 和 ORDERS):

UPDATE CUSTOMERS
JOIN ORDERS ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID
SET CUSTOMERS.SALARY = CUSTOMERS.SALARY + 1000;

Verification

正如我们在下面的 CUSTOMERS 表中看到的那样,我们在以上查询中执行的更改已反映出来:

UPDATE…​ JOIN with WHERE Clause

UPDATE…​ JOIN 查询中的 ON 子句用于对要更新的记录应用约束。此外,我们还可以使用 WHERE 子句使约束更严格。其语法如下:

UPDATE table(s)
SET column1 = value1, column2 = value2, ...
FROM table1
JOIN table2 ON column3 = column4
WHERE condition;

Example

观察一下下面的查询。在此,我们试图增加只赚取 2000.00 的 CUSTOMERS 的薪水:

UPDATE CUSTOMERS
LEFT JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID
SET SALARY = SALARY + 1000
WHERE CUSTOMERS.SALARY = 2000.00;

Verification

正如我们在下面的 CUSTOMERS 表中看到的那样,赚取 2000 薪水的 CUSTOMERS 增加了 1000:

Update Join Using Client Program

除了使用 MySQL 查询连接两张或更多表外,我们还可以使用客户端程序执行更新连接操作。

Syntax

Example

以下是这些程序 −