SQL Delete Join怎么用?SQL中如何通过JOIN删除关联数据?

文章导读
上一个 测验 下一个 SQL DELETE JOIN SQL 中的 DELETE JOIN 用于根据涉及另一个表的条件从表中删除行。它将 DELETE 语句与 JOIN 结合使用,允许您针对两个或多个表之间匹配的特定行进行操作。
📋 目录
  1. A SQL DELETE JOIN
  2. B 使用 WHERE 子句的 DELETE JOIN
  3. C 关于 DELETE JOIN 的重要要点
A A

SQL - DELETE JOIN

目录
  • SQL DELETE JOIN
  • 带 WHERE 子句的 DELETE JOIN
  • 关于 DELETE JOIN 的重要要点


上一个
测验
下一个

SQL DELETE JOIN

SQL 中的 DELETE JOIN 用于根据涉及另一个表的条件从表中删除行。它将 DELETE 语句与 JOIN 结合使用,允许您针对两个或多个表之间匹配的特定行进行操作。

当您需要删除一个表中依赖于另一个表值的相关记录时,这非常有用。

语法

以下是 SQL DELETE JOIN 语句的基本语法:

DELETE table1, table2
FROM table1 JOIN table2
ON table1.common_field = table2.common_field
WHERE table2.some_column = 'value';

这里所说的 JOIN,可以使用任何类型的 Join:常规 Join、Natural Join、Inner Join、Outer Join、Left Join、Right Join、Full Join 等。

示例

为了演示这个删除操作,我们必须先创建表并向其中插入数据。我们可以使用以下 CREATE TABLE 查询来创建这些表。

创建一个名为 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

以下 DELETE JOIN 查询 可以一次性从这些表中删除记录:

DELETE a
FROM CUSTOMERS AS a INNER JOIN ORDERS AS b
ON a.ID = b.CUSTOMER_ID;

SQL 中的输出将显示如下:

Query OK, 3 rows affected (0.01 sec)

验证

我们可以使用 SELECT 语句检索表的内容来验证更改是否已反映在表中,如下所示:

SELECT * FROM CUSTOMERS;

表显示如下:

ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 Hyderabad 4500.00
7 Muffy 24 Indore 10000.00

由于我们只从 CUSTOMERS 表中删除了记录,因此 ORDERS 表中不会反映这些更改。我们可以使用以下查询验证。

SELECT * FROM ORDERS;

ORDERS 表显示如下:

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

使用 WHERE 子句的 DELETE JOIN

DELETE JOIN 可以与 WHERE 子句结合使用,以删除连接后满足特定条件的行。连接定义了表之间的关系,而 WHERE 子句进一步过滤应删除的行。

示例

在以下查询中,我们删除 CUSTOMERS 表中薪资低于 Rs. 2000.00 的客户记录。

DELETE a
FROM CUSTOMERS AS a INNER JOIN ORDERS AS b
ON a.ID = b.CUSTOMER_ID
WHERE a.SALARY < 2000.00;

执行查询后,将显示以下输出。

Query OK, 1 row affected (0.01 sec)

验证

我们可以使用 SELECT 语句检索表的内容来验证更改是否反映在表中,如下所示:

SELECT * FROM CUSTOMERS;

删除后的 CUSTOMERS 表如下所示:

ID NAME AGE ADDRESS SALARY
1 Ramesh 32 Ahmedabad 2000.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 表中。我们可以使用以下查询验证:

SELECT * FROM ORDERS;

ORDERS 表显示如下:

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

关于 DELETE JOIN 的重要要点

以下是使用 SQL 中的 DELETE JOIN 时需要了解的一些重要要点:

  • DELETE JOIN 用于根据与另一个表的匹配条件从一个表中移除行。
  • 您可以通过在 DELETE 语句中使用其别名来指定要删除的表。
  • 它通常与 WHERE 子句结合使用,以过滤应删除的行。
  • 不同 SQL 数据库(如 MySQL、SQL Server、PostgreSQL)的语法可能略有不同。
  • 在执行 DELETE JOIN 之前,始终使用 SELECT 语句测试您的查询,以避免意外数据丢失。