以下是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的子查询将返回错误信息。