问题 单项选择题

以下是INVENTORY(库存)表的结构和表中所存储的数据:

INVENTORY
Column Name ID_NUMBER DESCRIPTION MANUFACTURER_ID QUANTITY PRICE ORDER_DATE
Key Type PK   FK      
Nulls/Unique NN, U NN NN      
FK Table     MANUFACTURER      
FK Column     ID_NUMBER      
Datatype NUM VARCHAR2 VARCHAR2 HUM HUM DATE
Length 9 25 25 9 8, 2  


计划将描述为Cable的所有产品的价格提高10%并且修改描述为“Copper Wire”的全部产品的价格等于描述为Cable产品的价格,这些操作要在一个语句中完成,请问将使用如下的哪个语句

A.UPDATE inventory SET price =

(SELECT
price * 1.10

FROM inventory

WHERE description=’Cable’)

WHERE description IN(’Copper Wire’, ’Cable’);
B.UPDATE inventory SET price =

(SELECT
price * .10

FROM inventory

WHERE description=’Cable’)

WHERE description IN(’Copper Wire’,’Cable’);
C.UPDATE inventory SET price =

(SELECT
price * 1.10

FROM inventory

WHERE description=’Cable’);
D.UPDATE inventory SET price =

(SELECT
price * 1.10

FROM inventory

WHERE description=’Cable’

OR description=’Copper Wire’)

WHERE description=’Cable’)

答案

参考答案:A

解析: 这一题主要是测试对在UPDATE语句中使用子查询的理解和熟悉程度。首先根据题目的要求,子查询必须只能返回描述为Cable的所有产品,而选项D的子查询除了描述为Cable的产品之外还将返回描述为“Copper Wire”的产品,这与题目要求不符,所以选项D肯定是错误的。
因为选项B的子查询返回的价格是Cable产品原来价格的10%而不是提高了10%,所以选项B肯定也是错误的。
虽然选项C的子查询语句返回的价格是正确的,但是因为在主查询中没有WHERE子句限制,所以将把INVENTORY(库存)表中所有产品的价格都提高到了描述为Cable的产品价格的110%,这显然与题目要求不符,所以选项C也可以排除。
最后,就只剩下了选项A,选项A肯定是正确的了。这里需要指出的是:在选项A的主查询的WHERE子句中包括了描述为Cable的产品,这一点非常重要,否则将只有描述为“Copper Wire”的产品提高了价格。还有一点值得注意的是:在本题的INVENTORY(库存)表中只有一行描述为Cable的产品,如果有多行这样的数据,答案A的子查询将返回错误信息。

解答题
单项选择题