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

作者: 温新

分类: 【MySql】

阅读: 1841

时间: 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日

请登录后再评论