• 顺序结构:程序从上往下依次执行
  • 分支结构:程序从两条或多条路径中选择一条去执行
  • 循环结构:程序在满足一定条件的基础上,重复执行一段代码

    一、分支结构

    1、IF函数

    功能:

  • 实现简单的双分支

语法:

  • IF(表达式1,表达式2,表达式3)

执行顺序:

  • 如果表达式1成立,则IF函数返回表达式2的值,否则返回表达式3的值

应用:

  • 任何地方

2、CASE结构

情况一;类似于Java中switch语句,一般用于实现等值判断

  • 语法:

CASE 变量\表达式、字段
WHEN 要判断的值 THEN 返回值1(或语句1;)
WHEN 要判断的值 THEN 返回值2(或语句2;)
……..
ELSE 要返回的值N(或语句n;)
END

情况二:类似于Java中的多重IF语句,一般用于是实现区间判断

  • 语法:

CASE
WHEN 要判断的值 THEN 返回值1(或语句1;)
WHEN 要判断的值 THEN 返回值2(或语句2;)
……..
ELSE 要返回的值N(或语句n;)
END

特点;

  • 可以作为表达式,嵌套在其他语句中使用,可以放在任何地方即BEGIN END中或BEGIN END的外面,如果作为独立的语句去使用,只能放在BEGIN END中并且加分号
  • 如果WHEN中的值满足或条件成立,则执行对应的THEN后面的语句,并且结束CASE,如果都不满足,则执行ELSE中的语句或值
  • ELSE可以省略,如果EISE省略了,并且所有WHEN条件都不满足,则返回NULL

案例:

  1. CREATE PROCEDURE test_case(IN score INT)
  2. BEGIN
  3. CASE
  4. WHEN score>=90 AND score<=100 THEN SELECT 'A';
  5. WHEN score>=80 THEN SELECT 'B';
  6. WHEN score>=60 THEN SELECT 'C';
  7. ELSE SELECT 'D';
  8. END CASE;
  9. END $
  10. CALL test_case(96)$

IF结构

功能:

  • 实现多重分支

语法:

  • if 条件1 then 语句1;

elseif 条件2 then 语句2;
…….
(else 语句n;)
end if;
应用:

  • 在begin end中

案例:

CREATE FUNCTION  test_if(score INT) RETURNS CHAR
BEGIN 
            IF score>=90 AND score<=100 THEN RETURN 'A';
            ELSEIF score>=80 THEN RETURN 'B';
          ELSEIF score>=60 THEN RETURN 'C';
            ELSE RETURN 'D';
            END IF;
END  $

SELECT test_if(86)$

二、循环结构

分类:
while、loop、repeat
循环控制:

  • iterate 类似于 countinue,继续,结束本次循环,继续下一次
  • leave 类似于 break ,跳出,结束当前所在的循环

WHILE

语法;
(标签:)while 循环条件 do
循环体;
end while (标签);

LOOP

语法:
(标签:)loop
循环体;
end loop (标签:);
(可以用来模拟简单的死循环)

REPEAT

语法:
(标签:)repeat
循环体;
until 结束循环条件
end repeat(标签:);

案例:
#1、

CREATE PROCEDURE pro_while1(IN insertCount INT)
BEGIN
            DECLARE i INT DEFAULT 1;
            WHILE i<=insertCount DO
                    INSERT INTO admin(username,password) VALUES (COUNT('Rose'+i),'666');
                    SET i=i+1;
            END WHILE;
END$

CALL pro_while1(100)$

2、添加leave语句

CREATE PROCEDURE test_whilel(IN insertCount INT)
BEGIN
        DECLARE i INT DEFAULT 1;
        a: WHILE i<=insertcount DO
                 INSERT INTO admin(username,'password') VALUES (CONCAT ('xiaohua',i), '0000');
                 IF i>=20 THEN LEAVE a;
                 END IF;
                 SET i=i+1;
         END WHILE а;
 LEND $

 CALL test_whilel (100)$

3、添加 iterate语句

TRUNCATE TABLE admin$
DROP PROCEDURE test_while1$

CREATE PROCEDURE test_whilel(IN insertCount INT)
BEGIN
        DECLARE i INT DEFAULT 0;
        a: WHILE i<=insertcount DO
             SET i=i+1;
        IF MOD(i,20)!=20 THEN ITERATE a;
        END IF;
                INSERT INTO admin(username,'password') VALUES (CONCAT ('xiaohua',i), '0000');
         END WHILE а;
 LEND $

 CALL test_whilel (100)$

总结:

语法 特点 位置
while (标签:)while 循环条件 do
循环体;
end while (标签);
先判断后执行





begin end 中
repeat (标签:)repeat
循环体;
until 结束循环条件
end repeat(标签:);
先执行后判断
loop (标签:)loop
循环体;
end loop (标签:);
没有条件的死循环