SQL UPDATE JOIN子句

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程