[每日一题]OCP1z0-047 :2013-08-07 SELECT---PRODUCT_INFORMATION
[每日一题]OCP1z0-047 :2013-08-07 SELECT---PRODUCT_INFORMATION
答案B
英语单词备注:
warranty:['wɔrənti] 保证;担保;授权;(正当)理由
purchased ['pə:tʃəst] 已经购买的
fulfill [ful'fil] 满足
根据题意是需要查所有产品信息中的产品名称、类别的id号、以及保修期到期时间(SYSDATE+WARRANTY_PERIOD),没有保修期的产品显示在行记录的上面,有保修期的产品按保修期的时间从小到大排序显示在行记录的下面。
下面根据测试来解释ABCD的答案。
一、登录oe用户,查看有多少表。
[html] <span style="font-size:18px;color:#333333;">idle> conn oe/oe Connected. oe@MYDB> SELECT TABLE_NAME FROM TABS; TABLE_NAME ------------------------------ PROMOTIONS PRODUCT_INFORMATION PRODUCT_DESCRIPTIONS ORDER_ITEMS ORDERS INVENTORIES 6 rows selected. </span><span style="color: rgb(255, 0, 0);font-size:32px; "> </span>
二、查PRODUCT_INFORMATION的表结构
[html] oe@MYDB> desc PRODUCT_INFORMATION Name Null? Type ----------------------------------------------------- -------- ------------------------------------ PRODUCT_ID NOT NULL NUMBER(6) PRODUCT_NAME VARCHAR2(50) PRODUCT_DESCRIPTION VARCHAR2(2000) CATEGORY_ID NUMBER(2) WEIGHT_CLASS NUMBER(1) WARRANTY_PERIOD INTERVAL YEAR(2) TO MONTH SUPPLIER_ID NUMBER(6) PRODUCT_STATUS VARCHAR2(20) LIST_PRICE NUMBER(8,2) MIN_PRICE NUMBER(8,2) CATALOG_URL VARCHAR2(50)
三、题目解释:
1、答案A不正确:
排序的时间不对SYSDATE-WARRANTY_PERIOD(即当前的时间减去保修期到期时间),应该写成SYSDATE+WARRANTY_PERIOD(即保修期到期时间)
2、答案B正确
1、 答案C不正确:
排序的时间不对SYSDATE(即当前时间),应该写成SYSDATE+WARRANTY_PERIOD(即保修期到期时间)
2、 答案D不正确:
没有排序,并且加了where限制条件,题意是要查所有的产品。
测试操作如下:
[html] oe@MYDB> SELECT product_name,category_id,SYSDATE+warranty_period AS "Warranty expire date" FROM 2 product_information ORDER BY SYSDATE+warranty_period; PRODUCT_NAME CATEGORY_ID Warranty exp -------------------------------------------------- ----------- ------------ Screws <S.32.P> 19 07-AUG-13 Screws <S.32.S> 19 07-AUG-13 Screws <Z.16.S> 19 07-AUG-13 Screws <Z.24.S> 19 07-AUG-13 Screws <Z.28.P> 19 07-AUG-13 Base ISO CP - BL 29 07-AUG-13 Client ISO CP - S 29 07-AUG-13 省略中间结果。。。。。。。。。。。。。。。。。。。。。。 Latex Gloves 39 07-AUG-23 Desk - S/V 31 07-AUG-28 Desk - W/48/R 31 07-AUG-33 Desk - W/48 31 07-AUG-33 Desk - OS/O/F 31 07-AUG-38 288 rows selected.
补充:order by(默认排序是ASC从小到大),如果从大到小是DESC.对于null的类据怎么排序,null的数据排序要么排在最前面,要么排在最后面。
升序,null排在最后面
[html] gyj@MYDB> select id,name from t1 order by name; ID NAME ---------- ---------------------------------------------------------------------------------------------------- 1 AAAAA 2 CCCCB 3 CCCCC 4 DDDDD 5 EEEEE 6 FFFFF 9 FFFFF 7 GGGGGG 8 HHHHH 10 RRRRR 11 12
降序,null排在最前面
[html] gyj@MYDB> select id,name from t1 order by name desc; ID NAME ---------- ---------------------------------------------------------------------------------------------------- 12 11 10 RRRRR 8 HHHHH 7 GGGGGG 9 FFFFF 6 FFFFF 5 EEEEE 4 DDDDD 3 CCCCC 2 CCCCB 1 AAAAA
如果升序,想让null排在最前面那要使用nulls first
[html] gyj@MYDB> select id,name from t1 order by name nulls first; ID NAME ---------- ---------------------------------------------------------------------------------------------------- 11 12 1 AAAAA 2 CCCCB 3 CCCCC 4 DDDDD 5 EEEEE 9 FFFFF 6 FFFFF 7 GGGGGG 8 HHHHH 10 RRRRR
如果降序,想让null排在最后面那要使用nulls last
[html] gyj@MYDB> select id,name from t1 order by name desc nulls last; ID NAME ---------- ---------------------------------------------------------------------------------------------------- 10 RRRRR 8 HHHHH 7 GGGGGG 9 FFFFF 6 FFFFF 5 EEEEE 4 DDDDD 3 CCCCC 2 CCCCB 1 AAAAA 11 12