SQL UPDATE 与 JOIN

在SQL中,使用带有 JOINUPDATE 语句,可以根据另一张表中的值来修改一张表中的数据。

示例

UPDATE Customers C
JOIN Orders O ON C.customer_id = O.customer_id
SET C.last_name = 'Smith'
WHERE O.item = 'Keyboard';

在这里,SQL命令连接了 CustomersOrders 这两张表。然后,它将所有订购了键盘的客户在 Customers 表中的 last_name 列更新为 Smith


UPDATE With INNER JOIN

在 `UPDATE` 语句中使用 INNER JOIN,当两张表中找到匹配记录时,可以进行精确的修改。

让我们看一个例子。

UPDATE Customers C
JOIN Shippings S ON C.customer_id = S.customer
SET C.age = C.age + 1
WHERE S.status = 'Pending';

这条SQL命令将 Customers 表中,在 Shippings 表中收货状态为 Pending 的顾客的年龄增加 1

注意:我们的在线编译器基于SQLite,它不支持在 `UPDATE` 和 `JOIN` 语句中同时使用。


UPDATE With LEFT JOIN

在 `UPDATE` 语句中使用 LEFT JOIN,即使在连接表中没有匹配的记录,也可以进行更新。例如:

UPDATE Customers C
LEFT JOIN Orders O ON C.customer_id = O.customer_id
SET C.country = 'Unknown'
WHERE O.customer_id IS NULL;

这条命令将 Customers 表中,在 Orders 表中没有匹配记录的顾客的 country 列更新为 Unknown


UPDATE With Multiple JOINs

对于复杂场景,我们也可以在一个 `UPDATE` 语句中使用多个 `JOIN` 查询。例如:

UPDATE Customers C
JOIN Orders O ON C.customer_id = O.customer_id
JOIN Shippings S ON O.order_id = S.shipping_id
SET C.first_name = 'Alice'
WHERE S.status = 'Delivered' AND O.item = 'Monitor';

在这里,SQL查询将 Customers 表中,订购了 Monitor 且收货状态为 Delivered 的顾客的 first_name 更新为 Alice


UPDATE With Subquery

在 `WHERE` 子句中使用子查询可以模拟SQLite中的 JOIN 行为。例如:

UPDATE Customers
SET age = age + 1
WHERE customer_id IN (
    SELECT customer
    FROM Shippings
    WHERE status = 'Pending'
);

SELECT * FROM Customers;

这条命令将 Customers 表中,在 Shippings 表中收货状态为 Pending 的顾客的年龄增加。

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战