当前位置:操作系统 > Unix/Linux >>

[每日一题]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  

 


CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,