Sql 简明教程

SQL - UPDATE JOIN

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

例如,如果一个学生更改了他们的主要电话号码并希望在他们的组织数据库中更新它,则需要在多个表(如学生记录、实验室记录、食堂通行证等)中修改信息。使用 JOIN 子句,可以将所有这些表合并为一个表,然后使用 UPDATE 语句,可以同时更新它们中的学生数据。

The SQL UPDATE…​ JOIN Clause

UPDATE 语句只修改单个表中的数据,SQL 中的 JOINS 用于根据一个匹配字段从多个表中提取行组合。

如果我们想更新多个表中的数据,可以使用 JOINS 将多个表合并为一个,然后使用 UPDATE 语句对其进行更新。这也被称为跨表修改。

Syntax

以下是 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;

其中, JOIN 可以是:常规连接、自然连接、内连接、外连接、左连接、右连接、全连接等。

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 );

该表将被创建为:

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

Hyderabad

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;

Verification

我们可以使用如下所示的 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

Hyderabad

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 with WHERE Clause

在从多个表中更新记录时,如果我们使用 WHERE 子句和 UPDATE…​ JOIN 语句,则可以筛选需要更新的记录(来自合并结果集)。

Syntax

MySQL 数据库中 SQL UPDATE…​JOIN 与 WHERE 子句的语法如下:

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

Example

现在,让我们执行以下查询来增加 ID 为 3 的顾客的薪水 -

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

Verification

我们可以使用 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

Hyderabad

4500.00

7

Muffy

24

Indore

10000.00

The UPDATE…​ JOIN Clause in SQL Server

SQL UPDATE…​JOIN 子句也适用于 SQL Server 数据库。但是,查询的语法与 MySQL 的语法略有不同。然而,它的工作方式与 MySQL 查询完全相同。

Syntax

以下是在 SQL Server 中 UPDATE…​ JOIN 的语法 -

UPDATE tables(s)
SET column1 = value1, column2 = value2, ...
FROM table1
JOIN table2 ON table1.join_column = table2.join_column;

Example

在此示例中,我们将使用以下 UPDATE…​JOIN 查询更新我们在上面创建的 CUSTOMERS 和 ORDERS 表的值 -

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

Verification

我们可以使用 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

Hyderabad

4500.00

7

Muffy

24

Indore

10000.00