GBase数据库以统一值进行更新
关键字 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 语句产生未装运的订单的订单编号的一个列表。它是一个执行一次的非相 关的子查询。