二十六、MySQL基础系列笔记之条件流程控制语句
流程控制语句用于实现逻辑控制,用于判断不同条件执行不同的流程。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
请登录后再评论