Dưới đây sẽ hướng dẫn cách sử dụng CASE-WHEN cho câu lệnh CHỌN, bạn có thể xem cách sử dụng CASE-WHEN cho câu lệnh UPDATE tại bài viết về CẬP NHẬT
Khi sử dụng cho SELECT thì CASE-WHEN sẽ thể hiện ở một cột riêng và ta có thể đặt bí danh cho cột này
cú pháp
Có hai cú pháp sử dụng CASE-WHEN can be current cụ thể như sau
Cú pháp 1
SELECT Các_cột, Bí_danh = CASE Tên_cột
KHI Giá_trị1 thì Hiển_thị1
KHI Giá_trị2 thì Hiển_thị2
...
KHÁC Hiển thị_thị
CHẤM DỨT
TỪ Các_bảng_liên_kết [WHERE Điều_kiện];
hoặc
SELECT Các_cột, CASE Tên_cột
KHI Giá_trị1 thì Hiển_thị1
KHI Giá_trị2 thì Hiển_thị2
...
KHÁC Hiển thị_thị
END AS Bí_danh
TỪ Các_bảng_liên_kết [WHERE Điều_kiện];
Ví dụ
Bảng giả sử Học sinh có các dữ liệu sau đây
sinh viênidstudentnamegender1A12B03CNull4A0Bây giờ ta muốn hiển thị toàn bộ dữ liệu của bảng Student in that the column giới tính sẽ hiển thị 'Nam' thay cho 1, 'Nữ' thay cho 0 và 'Không biết' thay cho Null. Ta làm như sau
CHỌN id sinh viên, tên sinh viên, GIỚI TÍNH = TRƯỜNG HỢP giới tính
KHI 1 thì 'Nam'
KHI 0 thì 'Nữ'
KHÁC 'Không xác định'
CHẤM DỨT
TỪ Học sinh;
hoặc
CHỌN mã học sinh, tên học sinh, giới tính TRƯỜNG HỢP
KHI 1 thì 'Nam'
KHI 0 thì 'Nữ'
KHÁC 'Không xác định'
END AS GIỚI TÍNH
TỪ Học sinh;
Kết quả sẽ hiển thị như sau
id sinh viêntên sinh viênGIỚI 1ANam 2BNữ 3CUUnknow4ANữCú pháp 2
SELECT Các_cột, Bí_danh = CASE
KHI Điều_kiện1 thì Hiển_thị1
KHI Điều_kiện2 thì Hiển_thị2
...
KHÁC Hiển thị_thị
CHẤM DỨT
TỪ Các_bảng_liên_kết [WHERE Điều_kiện];
hoặc
SELECT Các_cột, TRƯỜNG HỢP
KHI Điều_kiện1 thì Hiển_thị1
KHI Điều_kiện2 thì Hiển_thị2
...
KHÁC Hiển thị_thị
END AS Bí_danh
TỪ Các_bảng_liên_kết [WHERE Điều_kiện];
Ví dụ
Hiển thị tên hàng của khách hàng, tổng số tiền mua hàng của từng khách hàng và hiển thị cột Cấp độ với giá trị được nhập vào cột này theo tiêu chí sau. Nếu tổng số tiền mua hàng của từng khách < 5000 thì điền giá trị là 'Level1', từ 5000 đến < 10000 thì điền giá trị là 'Level2', >=10000 thì điền giá trị là 'V. I. P' [Câu 14 bài thực hành 4]. Ta giải quyết yêu cầu này như sau
- Trong hệ thống quản trị cơ sở dữ liệu MySQL, lệnh CASE được sử dụng để tạo ra các giá trị khác nhau dựa trên các điều kiện khác nhau
Nội dung chính Hiển thị
- Dưới đây là cú pháp sử dụng lệnh CASE
CASEWHEN điều kiện1 THÌ kết quả1; 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 đúng điều kiện thì nó sẽ kết thúc việc kiểm tra & trả lại giá trị nằm ở đ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 và 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
IDHọ và TênGiới tínhTuổiThành phố1Nguyễn Thành NhânNam22Cần Thơ2Dương Văn GánhNam19Cần Thơ3Dương Văn GánhSóc Trăng27Trần Thanh Trúc4NữNam20Cần Thơ5Dương Văn GánhSóc Trăng24Trần Thanh Trúc6NữNam21Cần Thơ7Dương Văn GánhNam26Cần Thơ8Dương Văn GánhSóc Trăng18Trần Thanh Trúcnữ
- hải phòng
- Châu Tinh Trì
- Lê Thị Huỳnh Như
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;
Bạc Liêu
Họ Và TênTuổiThành PhốNguyễn Thành Nhân22NamDương Văn Gánh19Sóc TrăngDương Văn Gánh27NamNữ20Hải PhòngDương Văn Gánh24NamNữ21NamDương Văn Gánh26NamDương Văn Gánh18Sóc TrăngTrần Thanh Trúc
Nữ [4 + 10] > 15 là đúng thì sắp xếp thứ tự các học sinh theo độ tuổi, còn nếu sai thì sắp .
SELECT *
FROM Student
ORDER BY
[CASE
WHEN [4+10] > 15 THEN Age
ELSE Gender
END];
Bạc Liêu
IDHọ và TênGiới tínhTuổiThành phố1Nguyễn Thành NhânNam22Cần Thơ2Dương Văn GánhNam19Cần Thơ4NữNam20Cần Thơ6NữNam21Cần Thơ7Dương Văn GánhNam26Cần Thơ3Dương Văn GánhSóc Trăng27Trần Thanh Trúc5Dương Văn GánhSóc Trăng24Trần Thanh Trúc8Dương Văn GánhSóc Trăng18Trần Thanh TrúcTìm hiểu lệnh CASE trong MySQL
1] Chức năng & cách sử dụng
- Trong hệ thống quản trị cơ sở dữ liệu MySQL, lệnh CASE được sử dụng để tạo ra các giá trị khác nhau dựa trên các điều kiện khác nhau
- Dưới đây là cú pháp sử dụng lệnh CASE
CASEWHEN điều kiện1 THÌ kết quả1; 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 đúng điều kiện thì nó sẽ kết thúc việc kiểm tra & trả lại giá trị nằm ở đ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 và 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
IDHọ và TênGiới tínhTuổiThành phố1Nguyễn Thành NhânNam22Cần Thơ2Dương Văn GánhNam19Cần Thơ3Dương Văn GánhSóc Trăng27Trần Thanh Trúc4NữNam20Cần Thơ5Dương Văn GánhSóc Trăng24Trần Thanh Trúc6NữNam21Cần Thơ7Dương Văn GánhNam26Cần Thơ8Dương Văn GánhSóc Trăng18Trần Thanh Trúcnữ
- hải phòng
- Châu Tinh Trì
- Lê Thị Huỳnh Như
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;
Bạc Liêu
Họ Và TênTuổiThành PhốNguyễn Thành Nhân22NamDương Văn Gánh19Sóc TrăngDương Văn Gánh27NamNữ20Hải PhòngDương Văn Gánh24NamNữ21NamDương Văn Gánh26NamDương Văn Gánh18Sóc TrăngTrần Thanh Trúc
Nữ [4 + 10] > 15 là đúng thì sắp xếp thứ tự các học sinh theo độ tuổi, còn nếu sai thì sắp .
SELECT *
FROM Student
ORDER BY
[CASE
WHEN [4+10] > 15 THEN Age
ELSE Gender
END];
Bạc Liêu
IDHọ và TênGiới tínhTuổiThành phố1Nguyễn Thành NhânNam22Cần Thơ2Dương Văn GánhNam19Cần Thơ4Dương Văn GánhNam20Cần Thơ6Dương Văn GánhNam21Cần Thơ7Dương Văn GánhNam26Cần Thơ3Dương Văn GánhSóc Trăng27Châu Tinh Trì5Tì Sa Môn ThiênSóc Trăng24Châu Tinh Trì8Tì Sa Môn ThiênSóc Trăng18Châu Tinh TrìTì Sa Môn Thiên
hậu giang
Doãn Chí Bình
Trần Thanh Trúc
nữ
CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN result ...] [ELSE result] END
CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END
hải phòng
IF condition1 THEN {...statements to execute when condition1 is TRUE...} [ ELSEIF condition2 THEN {...statements to execute when condition1 is FALSE and condition2 is TRUE...} ] [ ELSE {...statements to execute when both condition1 and condition2 are FALSE...} ] END IF;
Lê Thị Huỳnh Như
IF[expr1,expr2,expr3]
Bạc Liêu
Phạm Thị Thu Hiền
________số 8Vĩnh Long
SELECT CASE WHEN movie = 'The Matrix' THEN 'high' ELSE 'low' END AS suggestion
Bài viết được sự cho phép của tác giả Nguyễn Văn Minh
SELECT *
FROM Student
ORDER BY
[CASE
WHEN [4+10] > 15 THEN Age
ELSE Gender
END];
0You have been bao giờ tự hỏi. Trong MySQL, câu lệnh CASE, câu lệnh IF và hàm IF khác nhau thế nào? . Nhất là khi bạn vừa bắt đầu tìm hiểu về MySQL và cơ sở dữ liệu quan hệ