MYSQL
cũng có một lệnh tương tự đó là lệnh CASE
. Bản chất của lệnh CASE
cũng giống như lệnh if else trong mysql vậy thôi, nghĩa là dùng để rẻ nhánh dòng xử lý, nếu trường hợp nào đúng thì sẽ thực thi và thoát khỏi lệnh CASE
.Mục lục
- 1. Cú pháp CASE trong MySql
- 2. Ví dụ lệnh CASE trong Stored Procedure
- 3. Lệnh CASE trong câu SELECT
- Lời kết:
1. Cú pháp CASE trong MySql
Cú pháp của lệnh CASE như sau:
1 2 3 4 5 6 | CASE case_expression WHEN when_expression_1 THEN commands WHEN when_expression_2 THEN commands ... ELSE commands END CASE ; |
Bài viết này được đăng tại tranvanbinh.vn
Trong đó:
WHEN
dịch tiếng anh nghĩa là KHI, tức là KHI MỆNH ĐỀ ĐIỀU KIỆN ĐÚNG thì sẽ thực thi câu lệnh bên trong nó.ELSE
chính là trường hợp cuối cùng nếu như các điều kiệnWHEN
ở trên không đúng thì nó sẽ được chạy. Nếu để ý kĩ thì bạn thấy đây chính là lệnhdefault
trong Switch Case của các ngôn ngữ lập trình khác.
2. Ví dụ lệnh CASE trong Stored Procedure
Lệnh CASE
được ứng dụng rất nhiều nơi nhưng điển hình vẫn là trong Procedure. Tuy nhiên nó vẫn không bằng lệnh IF ELSE
bởi tính linh hoạt của nó không cao. Để các bạn rõ hơn thì ta sẽ làm một ví dụ như sau:
Ví dụ: Viết Stored Procedure nhập vào một số từ 0 tới 9 và đọc số đó thành chữ. Yêu cầu sử dụng lệnh CASE
trong MYSQL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | DELIMITER $$ DROP PROCEDURE IF EXISTS `docSo`$$ CREATE PROCEDURE `docSo`( IN a INT (11)) BEGIN DECLARE message VARCHAR (255); CASE a WHEN 0 THEN SET message = 'KHONG' ; WHEN 1 THEN SET message = 'MOT' ; WHEN 2 THEN SET message = 'HAI' ; WHEN 3 THEN SET message = 'BA' ; WHEN 4 THEN SET message = 'BON' ; WHEN 5 THEN SET message = 'NAM' ; WHEN 6 THEN SET message = 'SAU' ; WHEN 7 THEN SET message = 'BAY' ; WHEN 8 THEN SET message = 'TAM' ; WHEN 9 THEN SET message = 'CHIN' ; ELSE SET message = 'KHONG TIM THAY' ; END CASE ; SELECT message; END $$ DELIMITER ; |
Chạy thủ tục:
1 2 3 4 5 6 7 8 9 10 | CALL docSo(1); -- MOT CALL docSo(2); -- HAI CALL docSo(3); -- BA CALL docSo(4); -- BON CALL docSo(5); -- NAM CALL docSo(6); -- SAU CALL docSo(7); -- BAY CALL docSo(8); -- TAM CALL docSo(9); -- CHIN CALL docSo( 'tum lum' ); -- KHONG TIM THAY |
3. Lệnh CASE trong câu SELECT
Ngoài cách sử dụng ở phần 2 thì lệnh CASE còn thường hay sử dụng trong câu lệnh SELECT. Ví dụ khi bạn truy vấn lấy danh sách khách hàng và bạn muốn nếu field gender = 1
thì kết quả là nam và ngược lại kết quả là nữ. Để làm được thì ta phải sử dụng lệnh CASE trong MYSQL. Để dễ hiểu hơn bây giờ ta làm một bài tập nhỏ như sau:
Giả sử ta có bảng member như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | CREATE TABLE IF NOT EXISTS `members` ( `us_id` INT (11) NOT NULL AUTO_INCREMENT, `us_gender` TINYINT(1) DEFAULT '0' , `us_username` VARCHAR (30) COLLATE utf8_unicode_ci DEFAULT NULL , `us_password` VARCHAR (32) COLLATE utf8_unicode_ci DEFAULT NULL , `us_level` TINYINT(1) DEFAULT '0' , PRIMARY KEY (`us_id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE =utf8_unicode_ci AUTO_INCREMENT=4 ; -- -- Contenu de la table `members` -- INSERT INTO `members` (`us_id`, `us_gender`, `us_username`, `us_password`, `us_level`) VALUES (1, 0, 'admin' , '57e34a1be668ebd6e40d430806beb099' , 1), (2, 1, 'member' , '57e34a1be668ebd6e40d430806beb099' , 2), (3, 0, 'banded' , '57e34a1be668ebd6e40d430806beb099' , 0); |
Trong đó bạn cần chú ý đến field us_gender
như sau:
- Nếu
us_gender = 1
=> Nam - Các trường hợp khác => Nữ
Ok, câu lệnh chúng ta như sau:
1 2 3 4 5 6 7 | SELECT us_username, CASE us_gender WHEN 1 THEN 'Nam' ELSE 'Nu' END AS gender FROM members |
Và kết quả như hình:
Như vậy lệnh CASE
trong câu SELECT
hơi khác chút xíu đó là chỉ có lệnh END
thay vì END CASE
như trong Procedure.Các bạ lưu ý điểm này để viết câu truy vấn cho đúng nhé.
Lời kết:
Bài này đúng là thú vị phải không nào? Đọc những bài như thế này mới gọi là phê :v. Nhưng đừng nghĩ nó là nâng cao nhé, thực chất nó cũng ở dạng căn bản thôi, nâng cao chính là ở chỗ bạn dùng nó như thế nào? Áp dụng vào trường hợp nào? Khi nao dùng lệnh CASE
trong MySql
và khi nào dùng lệnh IF Else
?
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội
=============================
oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty