AI智能
改变未来

MySQL学习笔记10(流程控制、函数)

流程控制与函数

  • 一、流程控制
  • 1、变量
    • 2、分支
    • 3、循环
  • 二、函数
    • 1、创建函数
    • 2、调用函数
    • 3、删除函数
    • 4、存储过程和函数

    一、流程控制

    #流程控制结构
    顺序
    分支
    循环

    1、变量

    #1、用户变量
    #声明并赋值语法:
    #SET @变量名=值;
    #或
    #SET @变量名:=值;
    #或
    #SELECT @变量名:=值;

    #赋值:
    #方式一:
    #同上述三种
    #方式二:
    #SELECT 字段|常量|表达式 INTO 变量
    #【FROM 表】;

    #使用语法:
    #SELECT @变量名;

    #2、局部变量
    #声明的语法:
    #DECLARE 变量名 类型 【DEFAULT 值】;

    #赋值的语法:
    #方式一:
    #同上述三种
    #方式二:
    #SELECT 字段|常量|表达式 INTO 变量
    #【FROM 表】;
    #使用语法:
    #SELECT 变量名;

    #注意:用户变量和局部变量的区别

    #作用域 声明位置
    #用户变量 比较大 可以在BEGIN END 的外面也可以在里面
    #局部变量 只能在声明该变量的BEGIN END中 只能在BEGIN END 的里面

    mysql > set @name:=’tom’
    mysql>select beauty.name into @name from beauty where id = 1
    mysql>select @name

    mysql> delimiter $
    mysql>create procedure var_prol()
    ->begin
    ->declare id int default 1;
    ->set id = 10
    ->select id;
    ->end $
    mysql > call var_prol()

    2、分支

    #分支结构
    #1、IF函数
    #语法:
    SELECT IF(10>3,‘哈哈’,‘嘎嘎’);

    #应用在:BEGIN END 的里面和外面都行

    #2、CASE END
    #应用在:BEGIN END 的里面和外面都行
    #案例:
    CREATE PROCEDURE case_pro1(IN score FLOAT)
    BEGIN
    CASE
    WHEN score>90 THEN SELECT ‘A’;
    WHEN score>80 THEN SELECT ‘B’;
    WHEN score>60 THEN SELECT ‘C’;
    ELSE SELECT ‘D’;
    END CASE;
    END $

    call casepro1(100)

    #3、CASE END
    #类似于switch
    #案例:
    CREATE PROCEDURE case_pro2(IN myweek INT)
    BEGIN
    CASE myweek
    WHEN 1 THEN SELECT ‘干煸豆角’;
    WHEN 2 THEN SELECT ‘糖拌西红柿’;
    WHEN 3 THEN SELECT ‘红烧肉’;
    ELSE SELECT ‘干煸土豆’;
    END CASE;

    END $
    call case_pro2(1)
    #应用在:BEGIN END 的里面和外面都行

    #4、IF ELSEIF ELSE
    #类似于多重IF
    #语法:
    #IF 条件1 THEN 语句1;
    #ELSEIF 条件2 THEN 语句2;
    #ELSEIF 条件3 THEN 语句3;
    #ELSE 语句n;
    #END IF ;

    #案例:
    CREATE PROCEDURE if_pro1(IN score FLOAT)
    BEGIN
    IF score>90 THEN SELECT ‘A’;
    ELSEIF score>80 THEN SELECT ‘B’;
    ELSEIF score>60 THEN SELECT ‘C’;
    ELSE SELECT ‘D’;
    END IF;
    END $
    call if_pro1(67)
    #应用在:只能应用在BEGIN END中

    3、循环

    #三、循环结构
    #1、WHILE结构
    #语法:

    #【标签:】WHILE 循环条件 DO
    #循环体;
    #END WHILE 【标签】;

    #案例:
    #没有使用标签
    CREATE PROCEDURE loop_pro1(IN mycount INT)
    BEGIN
    DECLARE i INT DEFAULT 1;
    WHILE i<=mycount DO
    SELECT i;
    SET i=i+1;
    END WHILE;
    END $

    CALL lopp_pro1(10) $

    #使用标签
    CREATE PROCEDURE loop_pro2(IN mycount INT)
    BEGIN
    DECLARE i INT DEFAULT 1;
    a:WHILE i<=mycount DO
    SELECT i;
    SET i=i+1;
    END WHILE a;
    END $

    CALL lopp_pro2(10) $

    #使用标签+leave(break)
    CREATE PROCEDURE loop_pro3(IN mycount INT,OUT result INT)
    BEGIN
    DECLARE i INT DEFAULT 1;
    DECLARE SUM INT DEFAULT 0;

    a:WHILE i<=mycount DO
    SET SUM = SUM+i;
    IF SUM>20 THEN LEAVE a;
    END IF;
    SET i=i+1;

    END WHILE a;
    SELECT SUM INTO result;
    END $

    CALL loop_pro3(10,@r) $
    SELECT @r $

    #2、REPEAT结构
    #语法:

    #【标签:】REPEAT
    #循环体;
    #UNTIL 结束条件 END REPEAT 【标签】;
    #案例:
    #无标签
    CREATE PROCEDURE loop_pro4(IN mycount INT)
    BEGIN
    DECLARE i INT DEFAULT 1;
    REPEAT
    SELECT i;
    SET i=i+1;

    UNTIL i>mycount END REPEAT;

    END $

    CALL loop_pro4(4) $

    #1.没有使用leave
    CREATE PROCEDURE loop_pro5(IN mycount INT)
    BEGIN
    DECLARE i INT DEFAULT 1;
    a:REPEAT
    SELECT i;
    SET i=i+1;
    UNTIL i>mycount END REPEAT a;

    END $

    CALL loop_pro5(4) $

    #2.使用leave
    CREATE PROCEDURE loop_pro6(IN mycount INT)
    BEGIN
    DECLARE i INT DEFAULT 1;
    a:REPEAT
    SELECT i;
    IF i=2 THEN LEAVE a;
    END IF;
    SET i=i+1;

    UNTIL i>mycount END REPEAT a;

    END $

    CALL loop_pro6(10)

    #while和repeat的对比
    #执行顺序 循环条件 语法不同
    #WHILE 先判断后执行 循环成立的条件 WHILE关键字
    #REPEAT 先执行后判断 循环结束的条件 REPEAT关键字

    二、函数

    #函数
    学过的:length()/substr()/instr()/concat()
    好处同存储过程

    1、创建函数

    #语法:
    #CREATE FUNCTION 函数名(参数列表) RETURNS 返回类型
    #BEGIN
    #函数体;
    #END

    #返回类型 方法名(参数列表){
    #方法体
    #}

    #案例1:根据女神编号,返回男神名称
    CREATE FUNCTION my_f1(id INT) RETURNS VARCHAR(20)
    BEGIN
    DECLARE bname VARCHAR(20);
    SELECT boys.

    boyName

    INTO bname
    FROM beauty ,boys
    WHERE beauty.

    boyfriend_id

    =boys.

    id

    AND beauty.

    id

    =id;
    RETURN bname;
    END$

    SELECT my_f1(8) $

    2、调用函数

    #SELECT 函数名(参数);

    3、删除函数

    #DROP FUNCTION 函数名;

    4、存储过程和函数

    #功能 关键字 返回值 调用语法
    #存储过程 提高效率和重用性 PROCEDURE 可以有0个或多个 CALL 存储过程名()
    #函数 同上 FUNCTION 只能有一个 SELECT 函数名()

    赞(0) 打赏
    未经允许不得转载:爱站程序员基地 » MySQL学习笔记10(流程控制、函数)