以统一值进行更新

关键字 SET 之后的每一赋值都为列指定新的值。那个值统一地应用于您更新的每一行。在前面部分中的示例中,新的值为常量,但您可指定任意表达式,包括基于列值本身的表达式。假设制造商 HRO 已将所有价格提高百分之五,且您必须更新 stock 表来反映此提价。请使用下列语句:
UPDATE stock
          SET unit_price = unit_price * 1.05
          WHERE manu_code = 'HRO';
您还可使用子查询作为指定的值的一部分。当使用子查询作为表达式的元素时,它必须恰好返回一个值(一列和一行)。对于任何库存编号,或许您决定必须收取比那种产品的任何制造商都更高的价格。您需要更新所有未装运的订单的价格。下列示例中的 SELECT 语句指定该标准:
UPDATE items
          SET total_price = quantity *
          (SELECT MAX (unit_price) FROM stock
          WHERE stock.stock_num = items.stock_num)
          WHERE items.order_num IN
          (SELECT order_num FROM orders
          WHERE ship_date IS NULL);

第一个 SELECT 语句返回单个值:在 stock 表中,对于某个特定的产品的最高价格。第一个 SELECT 语句是一个相关联的子查询,因为当来自 items 的值出现在第一个 SELECT 语句的 WHERE 子句中时,您必须为您更新的每一行都执行该查询。

第二个 SELECT 语句产生未装运的订单的订单编号的一个列表。它是一个执行一次的非相关的子查询。