选择要更新的行

UPDATE 语句的任一形式都可以确定修改那些行的 WHERE 子句结尾。如果您省略 WHERE 子句,则修改所有行。要选择在 WHERE 子句中需要更改的精确行集可能非常复杂。对 WHERE 子句的唯一限制是,不可在子查询的 FROM 子句中命名您更新的表。

UPDATE 语句的第一种形式是,使用一系列赋值子句来指定新的列值,如下例所示:
UPDATE customer
          SET fname = 'Barnaby', lname = 'Dorfler'
          WHERE customer_num = 103;

WHERE 子句选择您想要更新的行。在演示数据库中,customer.customer_num 列是那个表的主键,因此,此语句最多可更新一行。

您还可在 WHERE 子句中使用子查询。假设 Anza 公司对他们的网球发出安全召回。结果是,包括来自制造商 ANZ 的库存编号 6 的任何未装运的订单都必须设定为延期交货,如下例所示:
UPDATE orders
          SET backlog = 'y'
          WHERE ship_date IS NULL
          AND order_num IN
          (SELECT DISTINCT items.order_num FROM items
          WHERE items.stock_num = 6
          AND items.manu_code = 'ANZ');

此子查询返回一订单编号(零个或多个)的列。然后,该 UPDATE 操作针对该列表测试 orders 的每一行,如果那一行相匹配,则执行更新。