SQL UPDATE JOIN子句
要使用SQL更新单个数据库表中输入的数据,可以使用UPDATE语句。然而,要更新多个数据库表中的数据,我们需要使用UPDATE… JOIN子句。
例如,如果学生更改了他们的主要电话号码并希望在他们的组织数据库中进行更新,信息需要在多个表中进行修改,如学生记录、实验室记录、食堂通行证等。使用JOIN子句,您可以将所有这些表合并为一个表,然后使用UPDATE语句可以同时更新其中的学生数据。
SQL UPDATE… JOIN子句
UPDATE语句只修改单个表中的数据,SQL中的JOINS用于根据匹配字段从多个表中获取行的组合。
如果我们想要在多个表中更新数据,可以使用JOINS将多个表合并为一个,并使用UPDATE语句进行更新。这也被称为跨表修改。
语法
下面是SQL UPDATE… JOIN语句的基本语法 –
UPDATE table(s)
JOIN table2 ON table1.join_column = table2.join_column
SET table1.column1 = table2.new_value1,
table1.column2 = table2.new_value2;
Where, JOIN(连接) 可以是:常规连接、自然连接、内连接、外连接、左连接、右连接、全连接等。
示例
假设我们使用以下查询语句创建了一个名为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, 'MP', 4500.00 ),
(7, 'Muffy', 24, 'Indore', 10000.00 );
表将被创建为:
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
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 | MP | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
让我们创建另一张表 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);
表格显示如下:
OID | DATE | CUSTOMER_ID | AMOUNT |
---|---|---|---|
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 |
以下UPDATE… JOIN查询将根据订单金额增加500,将客户的工资增加1000,以反映通货膨胀情况-
UPDATE CUSTOMERS
JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID
SET CUSTOMERS.SALARY = CUSTOMERS.SALARY + 1000,
ORDERS.AMOUNT = ORDERS.AMOUNT + 500;
验证
我们可以通过使用SELECT语句检索表的内容来验证更改是否反映在表中,如下所示:
SELECT * FROM CUSTOMERS;
更新后的CUSTOMERS表显示如下:
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 2500.00 |
3 | Kaushik | 23 | Kota | 3000.00 |
4 | Chaitali | 25 | Mumbai | 7500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | MP | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
现在,使用以下SELECT语句检查ORDERS表是否已更新-
SELECT * FROM ORDERS;
更新后的 ORDERS 表如下显示:
OID | DATE | CUSTOMER_ID | AMOUNT |
---|---|---|---|
102 | 2009-10-08 00:00:00 | 3 | 3500.00 |
100 | 2009-10-08 00:00:00 | 3 | 2000.00 |
101 | 2009-11-20 00:00:00 | 2 | 2060.00 |
103 | 2008-05-20 00:00:00 | 4 | 2560.00 |
UPDATE… JOIN 带有 WHERE 子句
在更新来自多个表的记录时,如果我们在 UPDATE… JOIN 语句中使用 WHERE 子句,我们可以对要更新的记录进行筛选(从组合结果集中)。
语法
MySQL 数据库中 SQL UPDATE… JOIN 带有 WHERE 子句的语法如下:
UPDATE table(s)
JOIN table2 ON column3 = column4
SET table1.column1 = value1, table1.column2 = value2, ...
WHERE condition;
示例
现在,让我们执行以下查询来增加客户编号为 3 的薪水。
UPDATE CUSTOMERS
LEFT JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID
SET CUSTOMERS.SALARY = CUSTOMERS.SALARY + 1000
WHERE ORDERS.CUSTOMER_ID = 3;
验证
我们可以通过使用SELECT语句检索其内容来验证更改是否在表中反映出来,如下所示。
SELECT * FROM CUSTOMERS;
如下表所示,”Kaushik”的SALARY值增加了1000 −
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 3000.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | MP | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
SQL Server中的UPDATE… JOIN子句
SQL Server数据库中也可以使用SQL UPDATE… JOIN子句。但是,查询的语法与MySQL略有不同。然而,它的工作方式与MySQL查询完全相同。
在MySQL中,UPDATE语句后面分别是JOIN子句和SET语句。而在MS SQL Server中,SET语句后面是JOIN子句。
语法
以下是SQL Server中UPDATE… JOIN的语法:
UPDATE… JOIN
UPDATE tables(s)
SET column1 = value1, column2 = value2, ...
FROM table1
JOIN table2 ON table1.join_column = table2.join_column;
示例
在这个示例中,我们将使用以下UPDATE… JOIN查询来更新我们上面创建的CUSTOMERS和ORDERS表的值。
UPDATE CUSTOMERS
SET SALARY = SALARY + 1000
FROM CUSTOMERS
JOIN ORDERS ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;
验证
我们可以通过使用SELECT语句检索其内容来验证表中的更改是否反映出来,如下所示。
SELECT * FROM CUSTOMERS;
更新后的CUSTOMERS表显示如下 –
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 2500.00 |
3 | Kaushik | 23 | Kota | 3000.00 |
4 | Chaitali | 25 | Mumbai | 7500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | MP | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |