[每日一题]OCP1z0-047 :2013-08-07 SELECT---PRODUCT_INFORMATION(一)

2014-11-24 14:07:25 · 作者: · 浏览: 0
[每日一题]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] 
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.  
  
  

二、查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                                              19 07-AUG-13  
Screws                                              19 07-AUG-13  
Screws                                              19 07-AUG-13  
Screws                                              19 07-AUG-13  
Screws                                              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  
-----