二十六、MySQL基础系列笔记之条件流程控制语句

作者: 温新

分类: 【MySql】

阅读: 2297

时间: 2020-11-19 17:14:29

流程控制语句用于实现逻辑控制,用于判断不同条件执行不同的流程。MySQL提供了三种条件判断函数:IF、CASE等。下面将对这种函数进行记录。要注意了,这里的语句与函数有区别,如if()函数与if语句在语法上是区别的,用法也不同。

注意:流程控制语句只能在存储过程、函数、触发器中使用。

IF语句

IF语句实现条件判断,满足不同条件执行不同的语句列表。

语法

IF 条件 THEN
	sql语句;
ELSE 条件 THEN
	sql语句;
ELSE
	sql语句
END IF;

案例

DELIMITER //
DROP PROCEDURE IF EXISTS demo01//
CREATE PROCEDURE demo01(IN sGender TINYINT)
BEGIN
	IF sGender=1 THEN
		SELECT '男';
	ELSEIF sGender=2 THEN
		SELECT '女';
	ELSE
		SELECT '不男不女';
	END IF;
END//

CALL demo01(1)//

CASE语句

CASE语句为多分支语句结构,该语句首先从WHEN后的VALUE中查找与CASE后的VALUE相等的值,如果查找到则执行该分支的内容,否则执行ELSE后的内容。

语法

# 形式一
CASE value
	WHEN value THEN sql语句;
	WHEN value THEN sql语句;
	ELSE sql语句;
END CASE

# 形式二
CASE
	WHEN value THEN sql语句;
	WHEN value THEN sql语句;
	ELSE sql语句;
END CASE

案例

# 案例一:形式一
DELIMITER //
DROP PROCEDURE IF EXISTS demo02//
CREATE PROCEDURE demo02(IN sGender TINYINT)
BEGIN
	CASE sGender
		WHEN 1 THEN SELECT '男';
		WHEN 2 THEN SELECT '女';
		ELSE SELECT '不男不女'; 
	END CASE;
END//

CALL demo02(2)//

# 案例二:形式二
DELIMITER //
DROP PROCEDURE IF EXISTS demo03//
CREATE PROCEDURE demo03(IN sGender TINYINT)
BEGIN
	CASE 
		WHEN sGender=1 THEN SELECT '男';
    	WHEN sGender=2 THEN SELECT '女';
    	ELSE SELECT '不男不女';
   	END CASE;
END//

案例--星期查询

DELIMITER //
DROP PROCEDURE IF EXISTS demo04//
CREATE PROCEDURE demo04(IN ttime DATETIME,OUT w VARCHAR(20))
BEGIN

	CASE
		WHEN weekday(ttime)=0 THEN set w='星期1';
		WHEN weekday(ttime)=1 THEN set w= '星期2';
		WHEN weekday(ttime)=2 THEN set w= '星期3';
		WHEN weekday(ttime)=3 THEN set w= '星期4';
		WHEN weekday(ttime)=4 THEN set w= '星期5';
		WHEN weekday(ttime)=5 THEN set w= '星期6';
		ELSE set w= '星期7';
	END CASE;
END//

# 调用
set @ww=''//
call demo04(now(),@ww)//
select @ww//

2020-11-20

请登录后再评论