Hướng dẫn mysql sp if else - mysql sp nếu khác

Trong bài này mình sẽ hướng dẫn cách sử dụng hàm IF trong MySQL thông qua cú pháp và ví dụ thực tế.

Hướng dẫn mysql sp if else - mysql sp nếu khác

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

1. Mô tả

Hàm IF trả về một giá trị nếu một điều kiện đúng hoặc giá trị khác nếu điều kiện sai.

2. Cú pháp

Cú pháp của hàm IF trong MySQL là:

IF( condition, [value_if_true], [value_if_false] )

Trong đó:

Bài viết này được đăng tại [free tuts .net]

  • mysql> SELECT IF(1<2, 'dung', 'sai');
    Ket qua: 'dung'
    
    mysql> SELECT IF(1<2, 1, 2);
    Ket qua: 1
    1: Giá trị mà bạn muốn kiểm tra.
  • mysql> SELECT IF(1<2, 'dung', 'sai');
    Ket qua: 'dung'
    
    mysql> SELECT IF(1<2, 1, 2);
    Ket qua: 1
    2: Không bắt buộc. Đó là giá trị được trả về nếu điều kiện đúng.
  • mysql> SELECT IF(1<2, 'dung', 'sai');
    Ket qua: 'dung'
    
    mysql> SELECT IF(1<2, 1, 2);
    Ket qua: 1
    3: Không bắt buộc. Đó là giá trị được trả về nếu điều kiện sai.

Lưu ý:

  • Hàm IF có thể trả về một chuỗi hoặc một giá trị số, tùy thuộc vào ngữ cảnh của cách nó được sử dụng.

3. Version

Hàm IF có thể được sử dụng trong các phiên bản sau của MySQL:

  • MySQL 5.7, MySQL 5.6, MySQL 5.5, MySQL 5.1, MySQL 5.0, MySQL 4.1, MySQL 4.0, MySQL 3.23.3

4. Ví dụ

mysql> SELECT IF(1<2, 'dung', 'sai');
Ket qua: 'dung'

mysql> SELECT IF(1<2, 1, 2);
Ket qua: 1

Khi làm việc với Stored Procedure thì bạn không thể thiếu hàm

mysql> SELECT IF(1<2, 'dung', 'sai');
Ket qua: 'dung'

mysql> SELECT IF(1<2, 1, 2);
Ket qua: 1
7 được vì chúng ta cũng phải kết hợp if với các hàm khác để xử lý các luồng đi trong
mysql> SELECT IF(1<2, 'dung', 'sai');
Ket qua: 'dung'

mysql> SELECT IF(1<2, 1, 2);
Ket qua: 1
8. Nên trong bài này chúng ta sẽ tìm hiểu mệnh đề if trước rồi sau đó tìm hiểu các phần khác.

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

Tới đây chắc hẳn bạn thấy

mysql> SELECT IF(1<2, 'dung', 'sai');
Ket qua: 'dung'

mysql> SELECT IF(1<2, 1, 2);
Ket qua: 1
9 cũng có nhiều cái giống các ngôn ngữ lập trình phải không nào? Ừ thì đương nhiên rồi vì
IF if_expression THEN 
	commands
   ELSEIF elseif_expression THEN 
	commands
   ELSE 
	commands
END IF;
0 cũng là một ngôn ngữ lập trình mà, nhưng có điều nó không mạnh bằng các ngôn ngữ khác. Không chừng chừ nữa, ta bắt đầu nhé.

1. Tìm hiểu mệnh đề if else trong MySql

Mệnh đề if cho phép bạn tạo luồng xử lý rẻ nhánh, nếu đúng thì thực thì và ngược lại mệnh đề sai thì nó sẽ không thực thi. Thông thường chúng ta kết hợp các toán tử, toán hạng và biến trong mysql để tạo ra các mệnh đề đúng sai trong điều kiện của lệnh IF. Không những chỉ có IF mà ta có thể sử dụng mệnh đề

IF if_expression THEN 
	commands
   ELSEIF elseif_expression THEN 
	commands
   ELSE 
	commands
END IF;
3 trong
mysql> SELECT IF(1<2, 'dung', 'sai');
Ket qua: 'dung'

mysql> SELECT IF(1<2, 1, 2);
Ket qua: 1
9 cũng được.Không những chỉ có IF mà ta có thể sử dụng mệnh đề
IF if_expression THEN 
	commands
   ELSEIF elseif_expression THEN 
	commands
   ELSE 
	commands
END IF;
3 trong
mysql> SELECT IF(1<2, 'dung', 'sai');
Ket qua: 'dung'

mysql> SELECT IF(1<2, 1, 2);
Ket qua: 1
9 cũng được.

Cú pháp mệnh đề if - else trong MYSQL như sau::

Bài viết này được đăng tại [free tuts .net]

IF if_expression THEN 
	commands
   ELSEIF elseif_expression THEN 
	commands
   ELSE 
	commands
END IF;

mysql> SELECT IF(1<2, 'dung', 'sai');
Ket qua: 'dung'

mysql> SELECT IF(1<2, 1, 2);
Ket qua: 1
1: Giá trị mà bạn muốn kiểm tra.:

  • mysql> SELECT IF(1<2, 'dung', 'sai');
    Ket qua: 'dung'
    
    mysql> SELECT IF(1<2, 1, 2);
    Ket qua: 1
    2: Không bắt buộc. Đó là giá trị được trả về nếu điều kiện đúng.
  • mysql> SELECT IF(1<2, 'dung', 'sai');
    Ket qua: 'dung'
    
    mysql> SELECT IF(1<2, 1, 2);
    Ket qua: 1
    3: Không bắt buộc. Đó là giá trị được trả về nếu điều kiện sai.
  • Lưu ý:

Hàm IF có thể trả về một chuỗi hoặc một giá trị số, tùy thuộc vào ngữ cảnh của cách nó được sử dụng.

3. Version

Hàm IF có thể được sử dụng trong các phiên bản sau của MySQL:Trước tiên ta cần tạo một bảng thành viên và insert một số thông tin Username và Password. Bạn chạy lệnh sau để tạo bảng:

CREATE TABLE IF NOT EXISTS `members` (
  `us_id` INT(11) NOT NULL AUTO_INCREMENT,
  `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_username`, `us_password`, `us_level`) VALUES
(1, 'admin', '57e34a1be668ebd6e40d430806beb099', 1),
(2, 'member', '57e34a1be668ebd6e40d430806beb099', 2),
(3, 'banded', '57e34a1be668ebd6e40d430806beb099', 0);

MySQL 5.7, MySQL 5.6, MySQL 5.5, MySQL 5.1, MySQL 5.0, MySQL 4.1, MySQL 4.0, MySQL 3.23.3

  • 4. Ví dụ
  • Khi làm việc với Stored Procedure thì bạn không thể thiếu hàm
    mysql> SELECT IF(1<2, 'dung', 'sai');
    Ket qua: 'dung'
    
    mysql> SELECT IF(1<2, 1, 2);
    Ket qua: 1
    7 được vì chúng ta cũng phải kết hợp if với các hàm khác để xử lý các luồng đi trong
    mysql> SELECT IF(1<2, 'dung', 'sai');
    Ket qua: 'dung'
    
    mysql> SELECT IF(1<2, 1, 2);
    Ket qua: 1
    8. Nên trong bài này chúng ta sẽ tìm hiểu mệnh đề if trước rồi sau đó tìm hiểu các phần khác.
  • Tới đây chắc hẳn bạn thấy
    mysql> SELECT IF(1<2, 'dung', 'sai');
    Ket qua: 'dung'
    
    mysql> SELECT IF(1<2, 1, 2);
    Ket qua: 1
    9 cũng có nhiều cái giống các ngôn ngữ lập trình phải không nào? Ừ thì đương nhiên rồi vì
    IF if_expression THEN 
    	commands
       ELSEIF elseif_expression THEN 
    	commands
       ELSE 
    	commands
    END IF;
    0 cũng là một ngôn ngữ lập trình mà, nhưng có điều nó không mạnh bằng các ngôn ngữ khác. Không chừng chừ nữa, ta bắt đầu nhé.

1. Tìm hiểu mệnh đề if else trong MySql

  • Mệnh đề if cho phép bạn tạo luồng xử lý rẻ nhánh, nếu đúng thì thực thì và ngược lại mệnh đề sai thì nó sẽ không thực thi. Thông thường chúng ta kết hợp các toán tử, toán hạng và biến trong mysql để tạo ra các mệnh đề đúng sai trong điều kiện của lệnh IF. Không những chỉ có IF mà ta có thể sử dụng mệnh đề
    IF if_expression THEN 
    	commands
       ELSEIF elseif_expression THEN 
    	commands
       ELSE 
    	commands
    END IF;
    3 trong
    mysql> SELECT IF(1<2, 'dung', 'sai');
    Ket qua: 'dung'
    
    mysql> SELECT IF(1<2, 1, 2);
    Ket qua: 1
    9 cũng được.tài khoản bị khóa
  • Cú pháp mệnh đề if - else trong MYSQL như sau:=> là admin
  • Luồng đi như sau:=> là member
  • Nếu
    IF if_expression THEN 
    	commands
       ELSEIF elseif_expression THEN 
    	commands
       ELSE 
    	commands
    END IF;
    5 đúng thì nó sẽ thực thi câu lệnh bên dưới nó, ngược lại nó bỏ qua và nhảy xuống IFELSE
    => đăng nhập sai

Nó kiểm tra mệnh đề

IF if_expression THEN 
	commands
   ELSEIF elseif_expression THEN 
	commands
   ELSE 
	commands
END IF;
6, nếu mệnh đề này đúng thì nó xử lệnh bên dưới, ngươc lại thì nó bỏ qua và nhảy tiếp xuống dưới.:

  • Ở dưới nó nhận thấy chỉ còn có
    IF if_expression THEN 
    	commands
       ELSEIF elseif_expression THEN 
    	commands
       ELSE 
    	commands
    END IF;
    7 nên thực thi luôn chứ không cần kiểm tra điều kiện nữa.
  • Lưu ý với bạn là ta có thể có nhiều IFELSE chứ không phải chỉ 1 cái như trong ví dụ trên.

2. Ví dụ mềnh đề if else trong MySql Stored Procedure:

DELIMITER $$

DROP PROCEDURE IF EXISTS `checkLogin`$$

CREATE PROCEDURE `checkLogin`(
    IN input_username VARCHAR(255),
    IN input_password VARCHAR(255),
    OUT result VARCHAR(255)
)
BEGIN
	/*Bien flag luu tru level. Mac dinh la -1*/
	DECLARE flag INT(11) DEFAULT -1;
	
	/*Thuc hien truy van gan level vao bien flag*/
	SELECT us_level INTO flag FROM members
	WHERE us_username = input_username AND us_password = MD5(input_password);

	/*Sau khi thuc hien lenh select nay ma ko co du lieu thi
	  luc nay flag se khong thay doi. Chinh vi the neu flag = -1 tuc la sai thong tin
	*/
	IF (flag <= 0) THEN
			SET result = 'Thong tin dang nhap sai';
		ELSEIF (flag = 0) THEN
			SET result = 'Tai khoan bi khoa';
		ELSEIF (flag = 1) THEN
			SET result = 'Tai khoan admin';
		ELSE
			SET result = 'Tai khoan member';
	END IF;
END$$

DELIMITER ;

Bây giờ ta sẽ làm một ví dụ cho bạn dễ hiểu hơn. Trước tiên ta cần tạo một bảng thành viên và insert một số thông tin Username và Password. Bạn chạy lệnh sau để tạo bảng::

CALL checkLogin('admin', 'vancuong', @result);
SELECT @result;

-- hoặc

CALL checkLogin('member', 'vancuong', @result);
SELECT @result;

-- hoặc

CALL checkLogin('banded', 'vancuong', @result);
SELECT @result;

Trong bảng này ta cần chú ý đến field

IF if_expression THEN 
	commands
   ELSEIF elseif_expression THEN 
	commands
   ELSE 
	commands
END IF;
8 như sau:

Nếu IF if_expression THEN commands ELSEIF elseif_expression THEN commands ELSE commands END IF;9 => tài khoản bị khóa

Nếu

CREATE TABLE IF NOT EXISTS `members` (
  `us_id` INT(11) NOT NULL AUTO_INCREMENT,
  `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_username`, `us_password`, `us_level`) VALUES
(1, 'admin', '57e34a1be668ebd6e40d430806beb099', 1),
(2, 'member', '57e34a1be668ebd6e40d430806beb099', 2),
(3, 'banded', '57e34a1be668ebd6e40d430806beb099', 0);
0 => adminStored Procedure chứ ít khi được sử dụng trong câu lệnh
DELIMITER $$

DROP PROCEDURE IF EXISTS `checkLogin`$$

CREATE PROCEDURE `checkLogin`(
    IN input_username VARCHAR(255),
    IN input_password VARCHAR(255),
    OUT result VARCHAR(255)
)
BEGIN
	/*Bien flag luu tru level. Mac dinh la -1*/
	DECLARE flag INT(11) DEFAULT -1;
	
	/*Thuc hien truy van gan level vao bien flag*/
	SELECT us_level INTO flag FROM members
	WHERE us_username = input_username AND us_password = MD5(input_password);

	/*Sau khi thuc hien lenh select nay ma ko co du lieu thi
	  luc nay flag se khong thay doi. Chinh vi the neu flag = -1 tuc la sai thong tin
	*/
	IF (flag <= 0) THEN
			SET result = 'Thong tin dang nhap sai';
		ELSEIF (flag = 0) THEN
			SET result = 'Tai khoan bi khoa';
		ELSEIF (flag = 1) THEN
			SET result = 'Tai khoan admin';
		ELSE
			SET result = 'Tai khoan member';
	END IF;
END$$

DELIMITER ;
4, nếu ở trong
DELIMITER $$

DROP PROCEDURE IF EXISTS `checkLogin`$$

CREATE PROCEDURE `checkLogin`(
    IN input_username VARCHAR(255),
    IN input_password VARCHAR(255),
    OUT result VARCHAR(255)
)
BEGIN
	/*Bien flag luu tru level. Mac dinh la -1*/
	DECLARE flag INT(11) DEFAULT -1;
	
	/*Thuc hien truy van gan level vao bien flag*/
	SELECT us_level INTO flag FROM members
	WHERE us_username = input_username AND us_password = MD5(input_password);

	/*Sau khi thuc hien lenh select nay ma ko co du lieu thi
	  luc nay flag se khong thay doi. Chinh vi the neu flag = -1 tuc la sai thong tin
	*/
	IF (flag <= 0) THEN
			SET result = 'Thong tin dang nhap sai';
		ELSEIF (flag = 0) THEN
			SET result = 'Tai khoan bi khoa';
		ELSEIF (flag = 1) THEN
			SET result = 'Tai khoan admin';
		ELSE
			SET result = 'Tai khoan member';
	END IF;
END$$

DELIMITER ;
4 thì ta thường sử dụng lệnh
CALL checkLogin('admin', 'vancuong', @result);
SELECT @result;

-- hoặc

CALL checkLogin('member', 'vancuong', @result);
SELECT @result;

-- hoặc

CALL checkLogin('banded', 'vancuong', @result);
SELECT @result;
2 để thay thế. Hy vọng qua bài này bạn sẽ hiểu một chút về lệnh if else trong mysql và là tiền đề để học những bài sau nữa. Chúc bạn học tốt!