Bài 20: Câu lệnh CASE trong MySQL
Trong MySQL mệnh đề CASE được chia làm hai định dạng. Chức năng CASE đơn giản hay còn gọi là Simple CASE Chức năng CASE tìm kiếm hay còn gọi là Searched CASE Trong đó : Simple CASE là so sánh một biểu thức với một bộ các biểu thức đơn giản để xác định kết quả. Searched CASE là ...
Trong MySQL mệnh đề CASE được chia làm hai định dạng.
- Chức năng CASE đơn giản hay còn gọi là Simple CASE
- Chức năng CASE tìm kiếm hay còn gọi là Searched CASE
Trong đó:
- Simple CASE là so sánh một biểu thức với một bộ các biểu thức đơn giản để xác định kết quả.
- Searched CASE là đánh giá một bộ các biểu thức Boolean để xác định kết quả
Cả 2 định dạng trên đều hỗ trợ đối số ELSE (nhưng không bắt buộc)
1. Cú pháp Simple CASE
CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list] ...
[ELSE statement_list]
END CASE
2. Cú pháp Searched CASE
CASE WHEN search_condition THEN statement_list [WHEN search_condition THEN statement_list] ... [ELSE statement_list] END CASE
Trong đó:
- case_value: là một biểu thức đánh giá khi sử dụng định dạng Simple CASE, case_value là bất cứ biểu thức SQL nào, miễn là hợp lệ
- when_value: là biểu thức đơn giản dùng để so sánh với biểu thức case_value khi sử dụng định dạng Simple CASE. when_value là một biểu thức SQL bất kỳ miễn là hợp lệ. Kiểu dữ liệu của 2 biểu thức: case_value và when_value phải giống nhau, nếu không giống nhau thì đổi về cùng một kiểu dữ liệu, có thể dùng các hàm chuyển đổi như CAST, …
- statement_list: là kết quả biểu thức trả về khi case_value = when_value trong Simple CASE, hoặc khi search_condition = TRUE trong Searched CASE. result_expression là một biểu thức SQL bất kỳ miễn là hợp lệ.
- ELSE statement_list: là biểu thức kết quả trả về khi case_value không thỏa bất cứ when_value trong Simple CASE, hoặc khi tất cả search_condition trả về FALSE trong Searched CASE.
- search_condition: là một biểu thức điều kiện trả về kiểu boolean (TRUE hoặc FALSE) được sử dụng trong Searched CASE. search_condition là bất kỳ biểu thức Boolean nào miễn là hợp lệ.
- END: là từ khóa dùng để đóng CASE lại
Nếu bạn đã lắm rõ lệnh switch..case trong PHP thì bạn hoàn toàn có thể sử dụng nhuần nhuyễn cú pháp lệnh CASE trong MySQL.
Chúng ta sẽ đi qua một vài ví dụ để hiểu rõ hơn về câu lệnh này.
1. Ví dụ Simple CASE.
Dựa vào gender trong bảng customer để hiện thị giới tính cho các khách hàng.
- Nếu gender = 0 -> Hiển thị Female(Nữ)
- Nếu gender = 1 -> Hiển thị Male(Nam)
- Nếu gender = 2 -> Hiển thị Other(Khác)
SELECT customerName,gender,phone,city,postalCode FROM customers WHERE country='USA'
Try In Out
Áp dụng lệnh CASE vào câu truy vấn.
SELECT customerName, (CASE gender WHEN '0' THEN 'Female' WHEN '1' THEN 'Male' ELSE 'Other' END ) as Gender ,phone,city,postalCode FROM customers WHERE country='USA'
Try In Out
2. Ví dụ Searched CASE.
Dựa vào buyPrice trong bảng products để xếp loại mức giá theo tiêu chí sau.
- Nếu buyPrice >= 100$ giá cao.
- Nếu buyPrice >= 50$ giá Trung bình.
- Nếu buyPrice < 30$ giá Thấp.
SELECT productCode,productName,quantityInStock,buyPrice FROM products
Try In Out
SELECT productCode,productName,quantityInStock,buyPrice, CASE WHEN buyPrice >= 100 THEN 'Cao' WHEN buyPrice >= 50 THEN 'TB' ELSE 'Thấp' END AS 'Level' FROM products
Try In Out
Thêm một chút nữa là bạn hoàn toàn có thể đưa nhiều điều kiện vào search_condition sử dụng các toán tử logic như AND,OR
SELECT productCode,productName,quantityInStock,buyPrice, CASE WHEN buyPrice >= 100 THEN 'Cao' WHEN buyPrice >= 50 AND buyPrice < 80 THEN 'Dưới TB' WHEN buyPrice >= 80 AND buyPrice < 100 THEN 'Trên TB' ELSE 'Thấp' END AS 'Level' FROM products
Try In Out
Tổng kết.
Trong bài viết này mình đã ôn lại cho các bạn sử dụng lệnh CASE trong MySQL. Thực ra thì nó cũng khá đơn giản và cũng khá tương đồng với cú pháp lênh switch..case trong PHP. Hy vọng qua bài viết này bạn sẽ hiểu và sử dụng nó một cách linh hoạt trong các câu truy vấn của mình.