Skip to content

Conditional Expressions

Conditional Expressions

  • Provide the use of IF-THEN-ELSE logic within a SQL statement
  • Use two methods:
    • CASE expression
    • DECODE function

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_exprn THEN return_exprn
      ELSE else_expr]
END

IF THEN ELSE statement:

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 nikovits.employees;
LAST_NAME JOB_ID SALARY REVISED_SALARY
King AD_PRES 24000 24000
Kochhar AD_VP 17000 17000
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

DECODE Function in Oracle SQL

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

DECODE(col|expression, search1, result1
       [, search2, result2, ...]
       [, default])
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 nikovits.employees;
LAST_NAME JOB_ID SALARY REVISED_SALARY
King AD_PRES 24000 24000
Kochhar AD_VP 17000 17000
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

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

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 nikovits.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