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:
- 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 |
- 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 |
- 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 |