则以下语句的结果是()
SELECT ID_P,ID_C,LASTNAME,FIRSTNAME
FROM PERSONS
ORDER BY VALUE(ID_P,3),VALUE(ID_C,0)DESC;
NULL,3,小军,孙 2,NULL,小永,钱 2,4,小芳,李 1,2,小洋,赵 1,1,小明,张
NULL,3,小军,孙 2,4,小芳,李 2,NULL,小永,钱 1,2,小洋,赵 1,1,小明,张
1,2,小洋,赵 1,1,小明,张 2,NULL,小永,钱 2,4,小芳,李 NULL,3,小军,孙
1,2,小洋,赵 1,1,小明,张 2,4,小芳,李 2,NULL,小永,钱 NULL,3,小军,孙
本题关键点在于 ORDER BY
子句中有多个属性列时,查询结果的排序规则。
排序规则:先按第一个属性列排序,当查询结果中第一个属性列的值相同时,再按第二个属性列排序。
注意:不是先按第一个属性列排序,再按第二个属性列排序。而是按第一个属性列排序后属性列值相同的记录,再按第二个属性列排序。
以上5条记录 ORDER BY
子句中的值分别为:
VALUE(ID_P,3) | VALUE(ID_C,0) | |
---|---|---|
① | 3 | 3 |
② | 1 | 1 |
③ | 1 | 2 |
④ | 2 | 0 |
⑤ | 2 | 4 |
先按第一个属性列排序。因为第一个属性列未指定排序规则,所以使用默认排序规则 ASC
,即升序排列。
结果:②③④⑤①
第一个属性列值相同的记录再按第二个属性列值排序。
第一次排序得到的结果中:②、③第一个属性列值相同,都等于1,④、⑤第一属性列值相同,都等于2;又因为第二个属性列指定排序规则 DESC
,所以再按第二个属性列降序排序。
结果:③②⑤④①
故选D。