问题 单项选择题

以下是产品(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
FROMproduct
WHERE manufacturer_id LIKE ’NF10032’

AND
NVL(cost, 0)<5.00
ORDER BY quantity DESC, cost;
以上的查询语句将产生如下的哪个结果A.DESCRIPTION
QUANTITY
COST
----------------- --------- ------
AA 2pk-battery
2513
AAA 6pk-battery
546
3
B.DESCRIPTION
QUANTITY
COST
----------------- --------- ------
AAA 8pk-battery

4.2
AA 2pk-battery
2513
AAA 6pk-battery
546
3
C.DESCRIPTION
QUANTITY
COST
----------------- --------- ------
AAA 6pk-battery
546
3
AAA 8pk-battery

4.2
AA 2pk-battery
2513
D.DESCRIPTION
QUANTITY
COST
----------------- --------- ------
AA 2pk-battery
2513
AAA 6pk-battery
546
3
AAA 8pk-battery
4.2

答案

参考答案: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的产品。

单项选择题
填空题