VIEW
STORED PROCEDURE
INDEX
FULL TEXT SEARCH
TRIGGER
TIPS
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Câu lệnh CASE trong MySQL

Chúng ta đã được học lệnh Switch case trong PHP rồi nhỉ? Vậy thì trong 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.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

1. Cú pháp CASE trong MySql

Cú pháp của lệnh CASE như sau:

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 [free tuts .net]

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ện WHEN ở trên không đúng thì nó sẽ được chạy. Nếu để ý kĩ thì bạn thấy đây chính là lệnh default 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

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:

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:

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:

SELECT
	us_username,
	CASE us_gender 
		WHEN 1 THEN 'Nam'
		ELSE 'Nu'
	END AS gender
FROM members	

Và kết quả như hình:

case then mysql png

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?

Tới đây mình xin dừng bút, hẹn gặp lại bạn bài tiếp theo. Good bye!

Cùng chuyên mục:

Hàm ENCRYPT trong MySQL

Hàm ENCRYPT trong MySQL

Cách sử dụng ENCRYPT trong MySQL

Hàm MD5 trong MySQL

Hàm MD5 trong MySQL

Cách sử dụng MD5 trong MySQL

Hàm OLD_PASSWORD trong MySQL

Hàm OLD_PASSWORD trong MySQL

Cách sử dụng OLD_PASSWORD trong MySQL

Hàm PASSWORD trong MySQL

Hàm PASSWORD trong MySQL

Cách sử dụng PASSWORD trong MySQL

Hàm ASCII trong MySQL

Hàm ASCII trong MySQL

Cách sử dụng ASCII trong MySQL

Hàm CHAR_LENGTH trong MySQL

Hàm CHAR_LENGTH trong MySQL

Cách sử dụng CHAR_LENGTH trong MySQL

Hàm CHARACTER_LENGTH trong MySQL

Hàm CHARACTER_LENGTH trong MySQL

Cách sử dụng CHARACTER_LENGTH trong MySQL

Hàm CONCAT trong MySQL

Hàm CONCAT trong MySQL

Cách sử dụng CONCAT trong MySQL

Hàm CONCAT_WS trong MySQL

Hàm CONCAT_WS trong MySQL

Cách sử dụng CONCAT_WS trong MySQL

Hàm FIELD trong MySQL

Hàm FIELD trong MySQL

Cách sử dụng FIELD trong MySQL

Hàm FIND_IN_SET trong MySQL

Hàm FIND_IN_SET trong MySQL

Cách sử dụng FIND_IN_SET trong MySQL

Hàm FORMAT trong MySQL

Hàm FORMAT trong MySQL

Cách sử dụng FORMAT trong MySQL

Hàm INSERT trong MySQL

Hàm INSERT trong MySQL

Cách sử dụng INSERT trong MySQL

Hàm INSTR trong MySQL

Hàm INSTR trong MySQL

Cách sử dụng INSTR trong MySQL

Hàm LCASE trong MySQL

Hàm LCASE trong MySQL

Cách sử dụng LCASE trong MySQL

Hàm LEFT trong MySQL

Hàm LEFT trong MySQL

Cách sử dụng LEFT trong MySQL

Hàm LENGTH trong MySQL

Hàm LENGTH trong MySQL

Cách sử dụng LENGTH trong MySQL

Hàm LOCATE trong MySQL

Hàm LOCATE trong MySQL

Cách sử dụng LOCATE trong MySQL

Hàm LOWER trong MySQL

Hàm LOWER trong MySQL

Cách sử dụng LOWER trong MySQL

Hàm LPAD trong MySQL

Hàm LPAD trong MySQL

Cách sử dụng LPAD trong MySQL

Top