Cách sử dụng biểu thức điều kiện (Conditional expressions) trong Oracle SQL

SysVN xin tiếp tục giới thiệu bài viết “Cách sử dụng biểu thức điều kiện (Conditional expressions) trong Oracle SQL” Mời các bạn theo dõi. Trước khi bắt đầu bài viết này mời các bạn xem lại các bài:

  1. Giới thiệu

Biểu thức điều kiện sử dụng cấu trúc logic IF-THEN-ELSE trong câu lệnh SQL. Trong Oracle SQL sử dụng 2 biểu thức CASE,  DECODE. 
2. Biểu thức CASE

  • Nếu expr =  comparison_expr1 kết quả trả về là  return_expr1
  • Nếu expr =  comparison_expr2 kết quả trả về là  return_expr2
  • Nếu expr =  comparison_exprn kết quả trả về là  return_exprn
  • Ngược lại thì expr =  else_expr

Trong biểu thức CASE, Oracle đánh giá thứ tự từ trên xuống dưới, so sánh expr với cặp WHEN … THEN đầu tiên nào mà có expr = comparison_expr thì trả về  return_expr. Nếu không có cặp WHEN … THEN nào thỏa thì expr =  else_expr

  • Những biểu thức expr và comparison_expr phải cùng kiểu dữ liệu, có thể là kiểu CHAR, VARCHAR2, NCHARNVARCHAR2, NUMBER, BINARY_FLOAT, BINARY_DOUBLE
  • Tất cả giá trị trả về  return_expr phải cùng kiểu dữ liệu
  • Không thể chỉ ra giá trị Null trong return_expr và  else_expr

Ví dụ 1:

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;

Ví dụ 2:

SELECT last_name,salary,
(CASE WHEN salary<5000 THEN ‘Low’
          WHEN salary<10000 THEN ‘Medium’
          WHEN salary<20000 THEN ‘Good’
          ELSE ‘Excellent’ END) qualified_salary
FROM employees;

3. Biểu thức DECODE

Cú pháp

  • Nếu col|expression =  search1 thì kết quả trả về là  result1
  • Nếu col|expression =  search2 thì kết quả trả về là  result2
  • Nếu col|expression không bằng bất cứ giá trị search nào thì kết quả trả về là  default

Vi dụ

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;