SQL DELETE JOIN子句
SQL中的简单删除操作可以对表中的单个记录或多个记录执行。要从多个表中删除记录,最直接的方法是逐个从一个表中删除记录。
然而,SQL通过允许在多个表上同时执行删除操作而使得操作更加简化。这是通过使用联接来实现的。
SQL DELETE… JOIN子句
SQL中联接的目的是基于共同的列/字段组合两个或多个表的记录。一旦表被连接,对获得的结果集执行删除操作将同时从所有原始表中删除记录。
例如,考虑一个教育机构的数据库。它包含各种表:部门、学生详情、图书馆通行证、实验室通行证等。当一组学生毕业时,需要删除他们在组织表中的所有详情,因为它们是无用的。然而,从多个表中分别删除详情可能会很麻烦。
为了简化操作,我们先使用 联接 从所有表中检索出所有毕业学生的组合数据,然后使用 DELETE 语句从所有表中删除该联接数据。整个过程可以在一个查询中完成。
语法
以下是SQL DELETE… JOIN语句的基本语法:
当我们在这里说JOIN时,可以使用任何类型的连接:常规连接,自然连接,内连接,外连接,左连接,右连接,全连接等。
示例
为了演示这个删除操作,我们首先必须创建表并插入值。我们可以使用以下的CREATE TABLE查询来创建这些表。
使用以下查询创建名为CUSTOMERS的表,其中包含包括他们的名称、年龄、地址和薪水等在内的客户的个人详细信息。
现在,使用INSERT语句将值插入到此表中,如下所示:
表格将会被创建为 −
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,包含下订单的详细信息和下订单的日期。
使用INSERT语句将值插入到该表中,如下所示:
表格显示如下:
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 |
下面的< b > DELETE… JOIN 查询从这些表中一次删除多个记录。**
输出
输出将以以下SQL格式显示:
验证
我们可以通过使用SELECT语句检索表的内容来验证更改是否反映在表中,如下所示:
表格显示如下−
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | MP | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
由于我们只从CUSTOMERS表中删除了记录,所以这些更改不会反映在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 WHERE子句
在DELETE…JOIN查询中使用的 ON 子句,用于对记录应用约束。除此之外,我们还可以使用WHERE子句使过滤更严格。请注意下面的查询;在这里,我们正在删除工资低于2000.00卢比的客户记录,其中表 CUSTOMERS 中的记录。
输出
执行查询后,显示以下输出结果。
验证
我们可以通过使用SELECT语句检索其内容来验证变动是否在表中反映出来,如下所示−
删除后的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 | MP | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
由于我们只从CUSTOMERS表中删除了记录,所以这些更改不会反映在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 |