以下是产品(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 |
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的产品。