zoukankan      html  css  js  c++  java
  • Chapter 04Using Conversion Functions and Conditional ExpressionsConditional Expressions

    Conditional Expressions

    • Prvoide the use of the IF-THEN-ELSE logic within a SQL statement
    • Use two methods
      • -CASE expression(SQL标准)
      • -DECODE function(专属Oracle)

    CASE Expression

    Facilitates conditional inquiries by doing the work of an IF-THEN-ELSE statement:

    CASE expr WHEN comparison_expr1 THEN return_expr1
            [ WHEN comparison_expr2 THEN return_expr2
              WHEN comparison_expr3 THEN return_expr3
              ...
              WHEN comparison_exprn THEN return_exprn
              ELSE else_expr
            ]
    END

    Using the CASE Expression

    Demo-01:CASE

    View Code
    SQL> SELECT last_name,job_id,salary,CASE job_id WHEN 'IT_PROG' THEN 1.10*salary WHEN 'ST_CLERK' THEN 1.15*salary WHEN 'SA_REP' THEN 1.20*salary ELSE salary END "REVISED_SALARY" FROM employees;
    
    LAST_NAME                 JOB_ID         SALARY REVISED_SALARY
    ------------------------- ---------- ---------- --------------
    OConnell                  SH_CLERK         2600           2600
    Grant                     SH_CLERK         2600           2600
    Whalen                    AD_ASST          4400           4400
    Hartstein                 MK_MAN          13000          13000
    Fay                       MK_REP           6000           6000
    Mavris                    HR_REP           6500           6500
    Baer                      PR_REP          10000          10000
    Higgins                   AC_MGR          12008          12008
    Gietz                     AC_ACCOUNT       8300           8300
    King                      AD_PRES         24000          24000
    Kochhar                   AD_VP           17000          17000
    
    LAST_NAME                 JOB_ID         SALARY REVISED_SALARY
    ------------------------- ---------- ---------- --------------
    De Haan                   AD_VP           17000          17000
    Hunold                    IT_PROG          9000           9900
    Ernst                     IT_PROG          6000           6600
    Austin                    IT_PROG          4800           5280
    Pataballa                 IT_PROG          4800           5280
    Lorentz                   IT_PROG          4200           4620
    Greenberg                 FI_MGR          12008          12008
    Faviet                    FI_ACCOUNT       9000           9000
    Chen                      FI_ACCOUNT       8200           8200
    Sciarra                   FI_ACCOUNT       7700           7700
    Urman                     FI_ACCOUNT       7800           7800
    
    LAST_NAME                 JOB_ID         SALARY REVISED_SALARY
    ------------------------- ---------- ---------- --------------
    Popp                      FI_ACCOUNT       6900           6900
    Raphaely                  PU_MAN          11000          11000
    Khoo                      PU_CLERK         3100           3100
    Baida                     PU_CLERK         2900           2900
    Tobias                    PU_CLERK         2800           2800
    Himuro                    PU_CLERK         2600           2600
    Colmenares                PU_CLERK         2500           2500
    Weiss                     ST_MAN           8000           8000
    Fripp                     ST_MAN           8200           8200
    Kaufling                  ST_MAN           7900           7900
    Vollman                   ST_MAN           6500           6500
    
    LAST_NAME                 JOB_ID         SALARY REVISED_SALARY
    ------------------------- ---------- ---------- --------------
    Mourgos                   ST_MAN           5800           5800
    Nayer                     ST_CLERK         3200           3680
    Mikkilineni               ST_CLERK         2700           3105
    Landry                    ST_CLERK         2400           2760
    Markle                    ST_CLERK         2200           2530
    Bissot                    ST_CLERK         3300           3795
    Atkinson                  ST_CLERK         2800           3220
    Marlow                    ST_CLERK         2500           2875
    Olson                     ST_CLERK         2100           2415
    Mallin                    ST_CLERK         3300           3795
    Rogers                    ST_CLERK         2900           3335
    
    LAST_NAME                 JOB_ID         SALARY REVISED_SALARY
    ------------------------- ---------- ---------- --------------
    Gee                       ST_CLERK         2400           2760
    Philtanker                ST_CLERK         2200           2530
    Ladwig                    ST_CLERK         3600           4140
    Stiles                    ST_CLERK         3200           3680
    Seo                       ST_CLERK         2700           3105
    Patel                     ST_CLERK         2500           2875
    Rajs                      ST_CLERK         3500           4025
    Davies                    ST_CLERK         3100           3565
    Matos                     ST_CLERK         2600           2990
    Vargas                    ST_CLERK         2500           2875
    Russell                   SA_MAN          14000          14000
    
    LAST_NAME                 JOB_ID         SALARY REVISED_SALARY
    ------------------------- ---------- ---------- --------------
    Partners                  SA_MAN          13500          13500
    Errazuriz                 SA_MAN          12000          12000
    Cambrault                 SA_MAN          11000          11000
    Zlotkey                   SA_MAN          10500          10500
    Tucker                    SA_REP          10000          12000
    Bernstein                 SA_REP           9500          11400
    Hall                      SA_REP           9000          10800
    Olsen                     SA_REP           8000           9600
    Cambrault                 SA_REP           7500           9000
    Tuvault                   SA_REP           7000           8400
    King                      SA_REP          10000          12000
    
    LAST_NAME                 JOB_ID         SALARY REVISED_SALARY
    ------------------------- ---------- ---------- --------------
    Sully                     SA_REP           9500          11400
    McEwen                    SA_REP           9000          10800
    Smith                     SA_REP           8000           9600
    Doran                     SA_REP           7500           9000
    Sewall                    SA_REP           7000           8400
    Vishney                   SA_REP          10500          12600
    Greene                    SA_REP           9500          11400
    Marvins                   SA_REP           7200           8640
    Lee                       SA_REP           6800           8160
    Ande                      SA_REP           6400           7680
    Banda                     SA_REP           6200           7440
    
    LAST_NAME                 JOB_ID         SALARY REVISED_SALARY
    ------------------------- ---------- ---------- --------------
    Ozer                      SA_REP          11500          13800
    Bloom                     SA_REP          10000          12000
    Fox                       SA_REP           9600          11520
    Smith                     SA_REP           7400           8880
    Bates                     SA_REP           7300           8760
    Kumar                     SA_REP           6100           7320
    Abel                      SA_REP          11000          13200
    Hutton                    SA_REP           8800          10560
    Taylor                    SA_REP           8600          10320
    Livingston                SA_REP           8400          10080
    Grant                     SA_REP           7000           8400
    
    LAST_NAME                 JOB_ID         SALARY REVISED_SALARY
    ------------------------- ---------- ---------- --------------
    Johnson                   SA_REP           6200           7440
    Taylor                    SH_CLERK         3200           3200
    Fleaur                    SH_CLERK         3100           3100
    Sullivan                  SH_CLERK         2500           2500
    Geoni                     SH_CLERK         2800           2800
    Sarchand                  SH_CLERK         4200           4200
    Bull                      SH_CLERK         4100           4100
    Dellinger                 SH_CLERK         3400           3400
    Cabrio                    SH_CLERK         3000           3000
    Chung                     SH_CLERK         3800           3800
    Dilly                     SH_CLERK         3600           3600
    
    LAST_NAME                 JOB_ID         SALARY REVISED_SALARY
    ------------------------- ---------- ---------- --------------
    Gates                     SH_CLERK         2900           2900
    Perkins                   SH_CLERK         2500           2500
    Bell                      SH_CLERK         4000           4000
    Everett                   SH_CLERK         3900           3900
    McCain                    SH_CLERK         3200           3200
    Jones                     SH_CLERK         2800           2800
    Walsh                     SH_CLERK         3100           3100
    Feeney                    SH_CLERK         3000           3000
    
    107 rows selected.

    DECODE Function

    Facilitates conditional inquiries by doing the work of a CASE expression or an IF-THEN-ELSE statement:

    DECODE(col|expression,search1,result1[,serach2,result2,...,][,default])

    Demo-01:DECODE

    View Code
    SQL> SELECT last_name,job_id,salary,DECODE(job_id,'IT_PROG',1.10*salary,'ST_CLERK',1.15*salary,'SA_REP',1.20*salary,salary) "REVISED_SALARY" FROM employees;
    
    LAST_NAME                 JOB_ID         SALARY REVISED_SALARY
    ------------------------- ---------- ---------- --------------
    OConnell                  SH_CLERK         2600           2600
    Grant                     SH_CLERK         2600           2600
    Whalen                    AD_ASST          4400           4400
    Hartstein                 MK_MAN          13000          13000
    Fay                       MK_REP           6000           6000
    Mavris                    HR_REP           6500           6500
    Baer                      PR_REP          10000          10000
    Higgins                   AC_MGR          12008          12008
    Gietz                     AC_ACCOUNT       8300           8300
    King                      AD_PRES         24000          24000
    Kochhar                   AD_VP           17000          17000
    
    LAST_NAME                 JOB_ID         SALARY REVISED_SALARY
    ------------------------- ---------- ---------- --------------
    De Haan                   AD_VP           17000          17000
    Hunold                    IT_PROG          9000           9900
    Ernst                     IT_PROG          6000           6600
    Austin                    IT_PROG          4800           5280
    Pataballa                 IT_PROG          4800           5280
    Lorentz                   IT_PROG          4200           4620
    Greenberg                 FI_MGR          12008          12008
    Faviet                    FI_ACCOUNT       9000           9000
    Chen                      FI_ACCOUNT       8200           8200
    Sciarra                   FI_ACCOUNT       7700           7700
    Urman                     FI_ACCOUNT       7800           7800
    
    LAST_NAME                 JOB_ID         SALARY REVISED_SALARY
    ------------------------- ---------- ---------- --------------
    Popp                      FI_ACCOUNT       6900           6900
    Raphaely                  PU_MAN          11000          11000
    Khoo                      PU_CLERK         3100           3100
    Baida                     PU_CLERK         2900           2900
    Tobias                    PU_CLERK         2800           2800
    Himuro                    PU_CLERK         2600           2600
    Colmenares                PU_CLERK         2500           2500
    Weiss                     ST_MAN           8000           8000
    Fripp                     ST_MAN           8200           8200
    Kaufling                  ST_MAN           7900           7900
    Vollman                   ST_MAN           6500           6500
    
    LAST_NAME                 JOB_ID         SALARY REVISED_SALARY
    ------------------------- ---------- ---------- --------------
    Mourgos                   ST_MAN           5800           5800
    Nayer                     ST_CLERK         3200           3680
    Mikkilineni               ST_CLERK         2700           3105
    Landry                    ST_CLERK         2400           2760
    Markle                    ST_CLERK         2200           2530
    Bissot                    ST_CLERK         3300           3795
    Atkinson                  ST_CLERK         2800           3220
    Marlow                    ST_CLERK         2500           2875
    Olson                     ST_CLERK         2100           2415
    Mallin                    ST_CLERK         3300           3795
    Rogers                    ST_CLERK         2900           3335
    
    LAST_NAME                 JOB_ID         SALARY REVISED_SALARY
    ------------------------- ---------- ---------- --------------
    Gee                       ST_CLERK         2400           2760
    Philtanker                ST_CLERK         2200           2530
    Ladwig                    ST_CLERK         3600           4140
    Stiles                    ST_CLERK         3200           3680
    Seo                       ST_CLERK         2700           3105
    Patel                     ST_CLERK         2500           2875
    Rajs                      ST_CLERK         3500           4025
    Davies                    ST_CLERK         3100           3565
    Matos                     ST_CLERK         2600           2990
    Vargas                    ST_CLERK         2500           2875
    Russell                   SA_MAN          14000          14000
    
    LAST_NAME                 JOB_ID         SALARY REVISED_SALARY
    ------------------------- ---------- ---------- --------------
    Partners                  SA_MAN          13500          13500
    Errazuriz                 SA_MAN          12000          12000
    Cambrault                 SA_MAN          11000          11000
    Zlotkey                   SA_MAN          10500          10500
    Tucker                    SA_REP          10000          12000
    Bernstein                 SA_REP           9500          11400
    Hall                      SA_REP           9000          10800
    Olsen                     SA_REP           8000           9600
    Cambrault                 SA_REP           7500           9000
    Tuvault                   SA_REP           7000           8400
    King                      SA_REP          10000          12000
    
    LAST_NAME                 JOB_ID         SALARY REVISED_SALARY
    ------------------------- ---------- ---------- --------------
    Sully                     SA_REP           9500          11400
    McEwen                    SA_REP           9000          10800
    Smith                     SA_REP           8000           9600
    Doran                     SA_REP           7500           9000
    Sewall                    SA_REP           7000           8400
    Vishney                   SA_REP          10500          12600
    Greene                    SA_REP           9500          11400
    Marvins                   SA_REP           7200           8640
    Lee                       SA_REP           6800           8160
    Ande                      SA_REP           6400           7680
    Banda                     SA_REP           6200           7440
    
    LAST_NAME                 JOB_ID         SALARY REVISED_SALARY
    ------------------------- ---------- ---------- --------------
    Ozer                      SA_REP          11500          13800
    Bloom                     SA_REP          10000          12000
    Fox                       SA_REP           9600          11520
    Smith                     SA_REP           7400           8880
    Bates                     SA_REP           7300           8760
    Kumar                     SA_REP           6100           7320
    Abel                      SA_REP          11000          13200
    Hutton                    SA_REP           8800          10560
    Taylor                    SA_REP           8600          10320
    Livingston                SA_REP           8400          10080
    Grant                     SA_REP           7000           8400
    
    LAST_NAME                 JOB_ID         SALARY REVISED_SALARY
    ------------------------- ---------- ---------- --------------
    Johnson                   SA_REP           6200           7440
    Taylor                    SH_CLERK         3200           3200
    Fleaur                    SH_CLERK         3100           3100
    Sullivan                  SH_CLERK         2500           2500
    Geoni                     SH_CLERK         2800           2800
    Sarchand                  SH_CLERK         4200           4200
    Bull                      SH_CLERK         4100           4100
    Dellinger                 SH_CLERK         3400           3400
    Cabrio                    SH_CLERK         3000           3000
    Chung                     SH_CLERK         3800           3800
    Dilly                     SH_CLERK         3600           3600
    
    LAST_NAME                 JOB_ID         SALARY REVISED_SALARY
    ------------------------- ---------- ---------- --------------
    Gates                     SH_CLERK         2900           2900
    Perkins                   SH_CLERK         2500           2500
    Bell                      SH_CLERK         4000           4000
    Everett                   SH_CLERK         3900           3900
    McCain                    SH_CLERK         3200           3200
    Jones                     SH_CLERK         2800           2800
    Walsh                     SH_CLERK         3100           3100
    Feeney                    SH_CLERK         3000           3000
    
    107 rows selected.

    Using the DECODE function

    Display the applicable tax rate for each employee in department 80:

    View Code
    SQL> SELECT last_name,salary,DECODE(TRUNC(salary/2000,0),0,0.00,1,0.09,2,0.20,3,0.30,4,0.40,5,0.42,6,0.44,0.45)TAX_RATE FROM employees WHERE department_id = 80;
    
    LAST_NAME                     SALARY   TAX_RATE
    ------------------------- ---------- ----------
    Russell                        14000        .45
    Partners                       13500        .44
    Errazuriz                      12000        .44
    Cambrault                      11000        .42
    Zlotkey                        10500        .42
    Tucker                         10000        .42
    Bernstein                       9500         .4
    Hall                            9000         .4
    Olsen                           8000         .4
    Cambrault                       7500         .3
    Tuvault                         7000         .3
    
    LAST_NAME                     SALARY   TAX_RATE
    ------------------------- ---------- ----------
    King                           10000        .42
    Sully                           9500         .4
    McEwen                          9000         .4
    Smith                           8000         .4
    Doran                           7500         .3
    Sewall                          7000         .3
    Vishney                        10500        .42
    Greene                          9500         .4
    Marvins                         7200         .3
    Lee                             6800         .3
    Ande                            6400         .3
    
    LAST_NAME                     SALARY   TAX_RATE
    ------------------------- ---------- ----------
    Banda                           6200         .3
    Ozer                           11500        .42
    Bloom                          10000        .42
    Fox                             9600         .4
    Smith                           7400         .3
    Bates                           7300         .3
    Kumar                           6100         .3
    Abel                           11000        .42
    Hutton                          8800         .4
    Taylor                          8600         .4
    Livingston                      8400         .4
    
    LAST_NAME                     SALARY   TAX_RATE
    ------------------------- ---------- ----------
    Johnson                         6200         .3
    
    34 rows selected.

    Summary

    In this lesson,you should have learned how to:

    • After data format for display using functions
    • Convert column data types using functions
    • Use NVL functions
    • Use IF-THEN-ELSE logic and other conditional expressions in a SELECT statement.
  • 相关阅读:
    折腾了好久的输入法显示已禁用
    文件下载上传小工具
    隐藏进程命令行参数,例如输入密码等高危操作
    创建并使用https证书
    编译lua可执行程序
    使用msys2在window下构建和使用Linux的软件
    golang遍历时修改被遍历对象
    使用shell发送邮件,方便快捷
    关于golang的time包总结
    获取Win和Linux系统启动时间,类似uptime功能,用于判断是否修改过系统时间
  • 原文地址:https://www.cnblogs.com/arcer/p/3017126.html
Copyright © 2011-2022 走看看