Biểu thức CASE trong MySQL
Bùi Tấn Lực
- 1105
- 23/09/2025
Chức năng của Biểu thức CASE trong MySQL
Biểu thức CASE trong MySQL dùng để xét điều kiện cho từng trường hợp trong câu lệnh select sau đó cho ra kết quả vào một tên cột tạm để xuất ra dữ liệu, biểu thức này giống như câu lệnh if else trong các ngôn ngữ lập trình.
Code Biểu thức CASE trong MySQL
SELECT
ten,
diemxeploai,
CASE
WHEN diemxeploai >= 9 THEN 'Xuất sắc'
WHEN diemxeploai >= 7 THEN 'Khá'
WHEN diemxeploai >= 5 THEN 'Trung bình'
ELSE 'Yếu'
END AS hocluc
FROM
tb_hocsinh;
<?php
$dbhost = 'localhost';
$dbuser = 'webmoi_userdata'; // Tên username
$dbpass = 'IhNRcn9n'; // Mật khẩu
// Kết nối đến tên username
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ){
die('Không kết nối được: ' . mysql_error());
}
// Truy vấn bảng
$sql = "
SELECT
ten,
diemxeploai,
CASE
WHEN diemxeploai >= 9 THEN 'Xuất sắc'
WHEN diemxeploai >= 7 THEN 'Khá'
WHEN diemxeploai >= 5 THEN 'Trung bình'
ELSE 'Yếu'
END AS hocluc
FROM
tb_hocsinh;
";
// Chọn tên database
mysql_select_db('webmoi_tendata');
// Xét kiểu tiếng việt
mysql_query('SET NAMES "utf8"');
// Kết quả truy vấn trả về mảng
$ketqua = mysql_query($sql,$conn);
if(!$ketqua){
die('Không thể lấy dữ liệu: ' . mysql_error());
}
// Dùng vòng lặp để lấy ra từng hàng trong bảng
while($row = mysql_fetch_array($ketqua, MYSQL_ASSOC)){
echo "Tên: {$row['ten']} <br> ".
"diemxeploai: {$row['diemxeploai']} <br> ".
"hocluc: {$row['hocluc']} <br> ".
"--------------------------------<br>";
}
// Đóng kết nối database
mysql_close($conn);
?>
Kết quả:
Tên: Trần Thị Vân
diemxeploai: 9
hocluc: Xuất sắc
--------------------------------
Tên: Bùi Đan Trúc Quỳnh
diemxeploai: 7
hocluc: Khá
--------------------------------
Tên: Bùi Tấn Lực
diemxeploai: 6
hocluc: Trung bình
--------------------------------
Tên: Nguyễn Thùy Dung
diemxeploai: 4
hocluc: Yếu
--------------------------------
Những lưu ý khi sử dụng CASE trong MySQL
Biểu thức CASE giúp xử lý nhiều nhánh điều kiện ngay trong câu lệnh MySQL. Tuy nhiên, khi truy vấn có nhiều điều kiện hoặc kết hợp với các hàm khác, cách viết CASE cần được kiểm soát để tránh kết quả sai và làm câu SQL khó đọc.
Phân biệt CASE với IF và IFNULL
CASE phù hợp khi cần xử lý nhiều trường hợp khác nhau, trong khi IF thường thích hợp với một điều kiện đơn giản và IFNULL chủ yếu dùng để thay thế giá trị NULL.
SELECT
ten,
CASE
WHEN diem >= 8 THEN 'Giỏi'
WHEN diem >= 6.5 THEN 'Khá'
ELSE 'Trung bình'
END AS xep_loai
FROM sinh_vien;
Nếu chỉ cần kiểm tra một điều kiện rồi chọn giữa hai kết quả, IF có thể ngắn gọn hơn. Còn khi mục tiêu là thay một giá trị NULL bằng giá trị mặc định, IFNULL thường trực tiếp và dễ hiểu hơn.
Thứ tự điều kiện trong biểu thức CASE
Với dạng CASE WHEN, MySQL xử lý các điều kiện theo thứ tự từ trên xuống. Khi gặp điều kiện đầu tiên đúng, biểu thức sẽ lấy kết quả tương ứng và không tiếp tục xét các nhánh phía sau.
SELECT
diem,
CASE
WHEN diem >= 5 THEN 'Đạt'
WHEN diem >= 8 THEN 'Giỏi'
ELSE 'Chưa đạt'
END AS ket_qua
FROM sinh_vien;
Trong ví dụ này, điều kiện diem >= 5 đặt trước nên những người đạt từ 8 điểm trở lên cũng được xếp vào nhóm Đạt. Vì vậy, các điều kiện có phạm vi cụ thể hơn nên được đặt trước điều kiện tổng quát.
Xử lý trường hợp không có điều kiện phù hợp
Nên cân nhắc thêm ELSE khi dữ liệu có khả năng không thỏa mãn bất kỳ điều kiện nào. Nếu không có nhánh phù hợp và cũng không khai báo ELSE, CASE có thể trả về NULL.
SELECT
trang_thai,
CASE
WHEN trang_thai = 1 THEN 'Đang hoạt động'
WHEN trang_thai = 0 THEN 'Đã khóa'
ELSE 'Không xác định'
END AS mo_ta
FROM tai_khoan;
Việc đặt một giá trị mặc định giúp kết quả truy vấn rõ ràng hơn, đồng thời hạn chế tình trạng dữ liệu ngoài dự kiến xuất hiện dưới dạng NULL.
Tránh viết CASE quá phức tạp trong truy vấn
CASE có thể chứa nhiều điều kiện, nhưng không nên dồn quá nhiều logic vào một biểu thức duy nhất. Một CASE quá dài sẽ khiến câu truy vấn khó đọc, khó kiểm tra và khó thay đổi khi nghiệp vụ phát sinh thêm yêu cầu.
Nên chia nhỏ logic khi cần thiết, đặt điều kiện theo thứ tự dễ hiểu và sử dụng tên cột kết quả có ý nghĩa. Nếu cùng một logic CASE xuất hiện ở nhiều truy vấn, có thể cân nhắc đưa phần xử lý đó vào tầng ứng dụng hoặc thiết kế lại truy vấn để giảm sự lặp lại.
Lời kết
Cảm ơn các bạn đã tham khảo bài viết Biểu thức CASE trong MySQL.
Tải file database .sql về nếu muốn kiểm tra hoặc thực hành Tải về.
- 0 Bình luận
Email, Điện thoại của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *