📅  最后修改于: 2023-12-03 15:05:20.841000             🧑  作者: Mango
在SQL中,我们可以使用DELETE语句来删除一行或多行数据。但当我们需要删除涉及到多个表的数据时,就需要使用到联接(JOIN)操作。
联接操作表示将两个或多个表中的行按照指定的关联条件连接在一起,形成一个虚拟的表。联接操作常用的有内联接、左联接、右联接和全联接等。
在使用DELETE语句删除联接时,我们需要使用到子查询。子查询中包含联接表和要删除的条件,外层DELETE语句对子查询返回的数据进行删除操作。
以删除订单表(orders)和订单详情表(order_details)中金额小于100的订单为例,删除联接语句如下:
DELETE orders, order_details
FROM orders
JOIN order_details
ON orders.order_id = order_details.order_id
WHERE order_details.amount < 100;
解释:
以删除订单表(orders)和订单详情表(order_details)中金额小于100的订单为例,左联接删除联接语句如下:
DELETE orders, order_details
FROM orders
LEFT JOIN order_details
ON orders.order_id = order_details.order_id
WHERE order_details.amount < 100;
解释:
以删除订单表(orders)和订单详情表(order_details)中金额小于100的订单为例,右联接删除联接语句如下:
DELETE orders, order_details
FROM orders
RIGHT JOIN order_details
ON orders.order_id = order_details.order_id
WHERE order_details.amount < 100;
解释:
以删除订单表(orders)和订单详情表(order_details)中金额小于100的订单为例,全联接删除联接语句如下:
DELETE orders, order_details
FROM orders
FULL JOIN order_details
ON orders.order_id = order_details.order_id
WHERE order_details.amount < 100;
解释:
使用DELETE语句删除联接时,需要使用到子查询,将联接条件和要删除的条件写在子查询中。内联接、左联接、右联接和全联接删除语句的区别在联接方式上,但使用的子查询语句是相同的。注意联接后保留的表是要删除的表和被保留表的交集,满足条件的行在该交集中才被删除,其他行都不受影响。