WEB CƠ BẢN

Tìm hiểu lệnh CASE trong MySQL


1) Chức năng & cách sử dụng

- Trong hệ quản trị cơ sở dữ liệu MySQL, lệnh CASE được dùng để tạo ra những giá trị khác nhau dựa trên những điều kiện khác nhau.

- Dưới đây là cú pháp sử dụng lệnh CASE:

CASE WHEN condition1 THEN result1; WHEN condition2 THEN result2; WHEN conditionN THEN resultN; ELSE result; END

- Khi lệnh CASE được thực thi, nó sẽ kiểm tra lần lượt các điều kiện (theo thứ tự từ trên xuống), nếu phát hiện được điều kiện đúng thì nó sẽ kết thúc việc kiểm tra & trả về giá trị nằm tại điều kiện đó.

- Lưu ý:

  • Nếu không có điều kiện nào đúng thì lệnh CASE sẽ trả về giá trị tại mệnh đề ELSE.
  • Nếu không có điều kiện nào đúng & không có mệnh đề ELSE thì lệnh CASE sẽ trả về giá trị NULL.

2) Tham khảo một số ví dụ

- Trong bài học này, tôi sẽ sử dụng cái bảng Student như bên dưới để làm một số ví dụ minh họa.

ID FullName Gender Age City
1 Nguyễn Thành Nhân Nam 22 Cần Thơ
2 Dương Văn Gánh Nam 19 Sóc Trăng
3 Trần Thanh Trúc Nữ 27 Hải Phòng
4 Châu Tinh Trì Nam 20 Cần Thơ
5 Lê Thị Huỳnh Như Nữ 24 Bạc Liêu
6 Tì Sa Môn Thiên Nam 21 Hậu Giang
7 Doãn Chí Bình Nam 26 Cần Thơ
8 Phạm Thị Thu Hiền Nữ 18 Vĩnh Long
Ví dụ:

- Liệt kê tên, tuổi, nhóm độ tuổi của tất cả các sinh viên.

  • Nếu sinh viên có tuổi lớn hơn 20 thì nhóm độ tuổi sẽ ghi là "Lớn hơn 20 tuổi"
  • Nếu sinh viên có tuổi bằng 20 thì nhóm độ tuổi sẽ ghi là "Bằng 20 tuổi"
  • Nếu sinh viên có tuổi nằm ngoài hai trường hợp trên thì nhóm độ tuổi sẽ ghi là "Nhỏ hơn 20 tuổi"
SELECT FullName, Age,
CASE
	WHEN Age > 20 THEN "Lớn hơn 20 tuổi"
	WHEN Age = 20 THEN "Bằng 20 tuổi"
	ELSE "Nhỏ hơn 20 tuổi"
END AS AgeGroup
FROM Student;

- Sau khi thực thi câu lệnh phía trên thì tôi sẽ lấy được một bảng dữ liệu như bên dưới:

FullName Age AgeGroup
Nguyễn Thành Nhân 22 Lớn hơn 20 tuổi
Dương Văn Gánh 19 Nhỏ hơn 20 tuổi
Trần Thanh Trúc 27 Lớn hơn 20 tuổi
Châu Tinh Trì 20 Bằng 20 tuổi
Lê Thị Huỳnh Như 24 Lớn hơn 20 tuổi
Tì Sa Môn Thiên 21 Lớn hơn 20 tuổi
Doãn Chí Bình 26 Lớn hơn 20 tuổi
Phạm Thị Thu Hiền 18 Nhỏ hơn 20 tuổi
Ví dụ:

- Liệt kê thông tin của tất cả các sinh viên.

- Lưu ý: Nếu biểu thức (4 + 10) > 15 là đúng thì sắp xếp thứ tự các sinh viên theo độ tuổi, còn nếu sai thì sắp xếp thứ tự các sinh viên theo giới tính.

SELECT *
FROM Student
ORDER BY
(CASE
	WHEN (4+10) > 15 THEN Age
	ELSE Gender
END);

- Sau khi thực thi câu lệnh phía trên thì tôi sẽ lấy được một bảng dữ liệu như bên dưới:

ID FullName Gender Age City
1 Nguyễn Thành Nhân Nam 22 Cần Thơ
2 Dương Văn Gánh Nam 19 Sóc Trăng
4 Châu Tinh Trì Nam 20 Cần Thơ
6 Tì Sa Môn Thiên Nam 21 Hậu Giang
7 Doãn Chí Bình Nam 26 Cần Thơ
3 Trần Thanh Trúc Nữ 27 Hải Phòng
5 Lê Thị Huỳnh Như Nữ 24 Bạc Liêu
8 Phạm Thị Thu Hiền Nữ 18 Vĩnh Long