友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
一世书城 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

SQL 21日自学通(V3.0)(PDF格式)-第108章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




SQL 21  日自学通(V1。0)                                                   翻译人    笨猪 



输出 



    line 5 truncated。 



        1    ttitle  left  'Report  for  Product:      &prod_title'  skip  2 



        2    col  product_name  new_value  prod_title 



        3    select  product_name;  unit_cost 



        4    from  products 



      5* where product_name = 'COFFEE MUG' 



输入 



    SQL》 @prod1 



输出 



    Report  for  Product:      COFFEE  MUG 



      PRODUCT_NAME                 UNIT_COST 



      COFFEE MUG                      6。95 



分析 



    PRODUCT_NAME  列的值已经通过 NEW_VALUE               方法被存入了变量 PROD_TITLE 



中  该变量中的值将在稍后被 TTITLE 命令调用 



    对于在 SQL  中更多的变量信息  请参见第 18 天的  PL/SQL                   简介    以及第 19 天的 



  TRANSACT SQL 简介 



DUAL  表 



    DUAL 表是在每一个 ORACLE 数据库中都存在的虚拟表  它只有一个叫 DUMMY  的 



列和一行值为 X        的数据  这个表可以由所有的用户出于通用的目标如进行计算                            这时它可 



以像一个计算器一样使用  或维护 SYSDATE 的格式而使用 



输入 



    SQL》 desc dual; 



输出 



      Name        Null?   Type 



      DUMMY               VARCHAR2(1) 



输入 



    SQL》 select * from dual 



                                                                             460 


…………………………………………………………Page 461……………………………………………………………

SQL 21  日自学通(V1。0)                                         翻译人   笨猪 



   输出 



          D 



          X 



   让我们来看一对使用 DUAL 表的例子 



输入 



    SQL》 select sysdate  from dual; 



输出 



    SYSDATE 



   08…MAY…97 



输入 



    SQL》 select 2 * 2  from dual; 



输出 



   2*2 



   非常简单  第一条语句从 DUAL  表中选择了 SYSDATE 以取得今天的日期  第二个例 



子显示了如何用这个表来进行乘法计算              我们的答案是 2*2  的结果为 4 



DECODE  函数 



   DECODE  函数是 SQL*PLUS   中众多功能强大的函数之一— — 也许它的功能是最强大 



的  标准的 SQL 中没有过程函数  它是包括在如 COBOL 和 C 语言中的 



   DECODE 语句与程序语言中的 IF          THEN 语句类似  对于复杂的报表来说灵活性是 



必需的  DECODE 可以弥补标准的 SQL 与过程语言函数之间的缺陷 



语法 



   DECODE(column1; value1; output1; value2; output2; output3) 



   语法中的例子是对 column1 列执行 DECODE 函数  如果 column1 有一个值为 value1 



那么将会用 output1 来代替当前值       如果 column1  的值为value2 那么就会用 OUTPUT2 来 



代替当前值     如果 column1  中哪两个值都不是  那么就会用 OUTPUT3 来代替当前值 



    实际应用的例子呢  我们先来对一个新表运行一下 SELECT 语句 



输入 



    SQL》 select * from states; 



                                                                  461 


…………………………………………………………Page 462……………………………………………………………

SQL 21  日自学通(V1。0)                                                            翻译人     笨猪 



输入 



     ST                                             IL 



     IN                                             OH 



     FL                                             CA 



     KY                                             NY 



     7 rows selected。 



     现在来用一下 DECODE 命令 



输入 



     SQL》 select decode(state;'IN';'INDIANA';'OTHER') state from states; 



输出 



     STATE                                          OTHER 



     INDIANA                                        OTHER 



     OTHER                                          OTHER 



     OTHER                                          OTHER 



     7 rows selected。 



分析 



     符合条件  州为 IN           的记录只有一条  所以只有一行显示为 INDIANA                         其它的记录 



看上去都不符合           因为它们的显示为 OTHER 



     下边的例子为表中的每一个值提供了输入字符串                             只有当你的州不在列表中时  你才 



会收到 OTHER 信息 



输入 



     SQL》 select decode(state;'IN';'INDIANA'; 



        2                                            'FL';'FLORIDA'; 



        3                                            'KY';'KENTUCKY'; 



        4                                            'IL';'ILLINOIS'; 



        5                                            'OH';'OHIO'; 



        6                                            'CA';'CALIFORNIA'; 



        7                                            'NY';'NEW  YORK';'OTHER') 



        8    from  states; 



输出 



                                                                                       462 


…………………………………………………………Page 463……………………………………………………………

SQL 21  日自学通(V1。0)                                                       翻译人    笨猪 



        DECODE(STATE) 



        INDIANA 



        FLORIDA 



        KENTUCKY 



        ILLINOIS 



        OHIO 



        CALIFORNIA 



        NEW YORK 



    7 rows selected。 



    这实在太容易了          在下一个例子中将引入一个 PAY  表                 这个表可以显示职 DECODE 



函数更为强大的能力 



输入 



    SQL》 col hour_rate hea 〃HOURLY|RATE〃 for 99。00 



    SQL》 col date_last_raise hea 〃LAST|RAISE〃 



    SQL》 select name; hour_rate; date_last_raise 



        2    from  pay; 



输出 



                                              HOURLY  LAST 



      NAME        RATE       RAISE 



      JOHN        12。60      01…JAN…96 



      JEFF        8。50        17…MAR…97 



      RON         9。35       01…OCT…96 



      RYAN        7。00        15…MAY…96 



      BRYAN       11。00      01…JUN…96 



      MARY        17。50      01…JAN…96 



      ELAINE      14。20      01…FEB…97 



    7 rows selected。 



    准备好了吗        现在是给在 PAY  表中的每个人长工资的时候了                      如果某个人上次长工资 



的时间是 1997 年  那么将他的工资上浮 10%                  如果他上次长工资是在 1996 年  那么将他 



的工资上浮 20%        此外  还要显示在这两种情况下工资上调的百分率 



输入 



    SQL》 col new_pay hea 'NEW PAY' for 99。00 



    SQL》 col hour_rate hea 'HOURLY|RATE' for 99。00 



                                                                                 463 


…………………………………………………………Page 464……………………………………………………………

SQL 21  日自学通(V1。0)                                                            翻译人     笨猪 



     SQL》 col date_last_raise hea 'LAST|RAISE' 



     SQL》 select name; hour_rate; date_last_raise; 



        2                  decode(substr(date_last_raise;8;2);'96';hour_rate  *  1。2; 



        3                                                                                        '97';hour_rate  *  1。1)  new_pay; 



        4                  decode(substr(date_last_raise;8;2);'96';'20%'; 



        5                                                                                        '97';'10%';null)  increase 



        6    from  pay; 



输出 



                                              HOURLY  LAST 



             NAME        RATE        RAISE         NEW PAY        INC 



             JOHN         12。60      01…JAN…96     15。12          20% 



             JEFF        8。50       17…MAR…97      9。35           10% 



             RON         9。35       01…OCT…96      11。22          20% 



             RYAN        7。00       15…MAY…96      8。40           20% 



             BRYAN        11。00      01…JUN…96     13。20          20% 



             MARY         17。50      01…JAN…96     21。00          20% 



             ELAINE       14。20      01…FEB…97     15。62          10% 



     7 rows selected。 



分析 



     根据输出情况          除了 JEFF  和 ELAINE  每个人的工资都上涨了 20%                    他们在今年已经 



涨过工资了 



 日期转换 



     如果你想
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!