多选题 以下是产品(PRODUCT)表中的数据:
PRODUCT
ID NUMBER
DESCRIPTION
MANUFACTURER ID
QUANTITY
COST
215
AAA 6pk-battery
NF10032
546
3.00
140
AA 2pk-battery
EL7968
2000
603
D 2pk-battery
OT456
318
1.10
725
C 2pk-battery
OT456
239
.75
218
AAA 6pk-battery
OT456
980
3.25
220
AAA 8pk-battery
NF10032
4.20
126
AA 2pk-battery
NF10032
2513
751
C 2pk-battery
EL7968
84
100
SELECT description, quantity, cost
FROM product
WHERE manufacturer_id LIKE "NF10032"
AND NVL(cost, 0)<5.00
ORDER BY quantity DESC, cost;
以上的查询语句将产生如下的哪个结果?
【正确答案】 B
【答案解析】[解析] 这是一个比较复杂的问题,该题是测试对单行函数NVL、逻辑运算符AND以及空值排序的理解。参考的知识包括有关单行函数NVL的介绍、有关逻辑运算符AND的介绍以及有关空值的排序的介绍。
接下来,详细解释一下这个SQL语句的大致执行流程:
(1)首先根据WHERE manufacturer_id LIKE "NF10032"子句获取全部manufacturer_id为NF10032的数据行(产品),实际上一共有三行,它们的价格(cost)分别是3.00、4.20和NULL。
(2)执行AND NVL(cost, 0)<5.00子句中的NVL(cost, 0)函数,将NULL转换成0。随后选择那些COST小于5.00的全部数据行,实际上三行数据都满足。此时,就可以排除所有只有两行数据的结果了,因此选项A完全可以排除。
(3)利用ORDER BY quantity DESC, cost子句对选取的所有数据行进行排序,由于在这个题中所选中的三行数据的quantity各不相同,所以根本不用考虑COST的排序。要注意的是这里的description为AAA 8pk-battery的产品的quantity为NULL,所以按降序应该排列在最前面,其实到此为止已经可以确定正确的答案肯定是选项B了,因为只有在选项B中description为AAA 8pk-battery的产品排在最前面。接下来的description为从2pk-battery的产品排列在第2位,最后一个是description为AAA 6pk-battery的产品。