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:
- Cách sử dụng Single-Row Functions trong Oracle SQL
- Cách sử dụng Single-Row Functions kiểu date trong Oracle SQL
- Cách sử dụng Conversion Functions và những biểu thức điều kiện trong Oracle SQL
- Cách sử dụng những hàm lồng vào nhau (Nesting Functions) trong Oracle SQL
- Cách sử dụng General Functions trong Oracle SQL
- 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, NCHAR, NVARCHAR2, 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;