zoukankan      html  css  js  c++  java
  • SQL学习笔记15——SQL的流程控制结构

    SQL学习笔记15——SQL的流程控制结构

    分类

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

    分支结构

    1. if函数
      • 功能:实现简单的双分支
      • 语法
      IF(表达式1,表达式2,表达式3)
      #执行顺序:如果表达式1成立,则IF函数返回表达式2的值,否则返回表达式3的值
      
      • 应用:任何地方
    2. case结构
      • 情况1:类似于java中的switch语句,一般用于实现等值判断
      • 情况2:类似于jave中的多重IF语句,一般用于实现区间判断
        • case情况1
        case 变量或表达式或字段
        when 常量1 then 值1或语句1;/*值的话末尾不要加分号*/
        when 常量2 then 值2或语句2;
        ...
        else 值n或语句n;
        end case;/*值的话末尾不要加case*/
        
        • case情况2
        case 
        when 条件1 then 值1或语句1;/*值的话末尾不要加分号*/
        when 条件2 then 值2或语句2;
        ...
        else 值n或语句n;
        end case;/*值的话末尾不要加case*/
        /* 这种方式可以判断位于某个区间这种条件,而case情况1不行 /*
        
      • 特点:可以作为表达式,嵌套在其他语句中使用,可以放在任何地方,可以作为独立的语句去使用,此时只能放在begin end中
      • 如果when中的值满足或条件成立,则执行对应的then后面的语句,并且结束case,如果都不满足,则执行else中的语句或值
      • else可以省略,如果else省略了,并且所有的when条件都不满足,则返回NULL
      • 作为独立的语句去使用,放在begin end中的一个案例
      CREATE PROCEDURE test_case(IN score INT)
      BEGIN
      	CASE
      	WHEN score>=90 AND score<=100 THEN SELECT 'A';
      	WHEN score>=80 THEN SELECT 'B';
      	WHEN score>=60 THEN SELECT 'C';
      	ELSE SELECT 'D';
      	END CASE;
      END $
      
      CALL test_case(95)$
      
    3. 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)$
      

    循环结构

    分类

    循环类型:

    1. while
    2. loop
    3. repeat

    循环控制:

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

    位置:
    都只能放在begin end中

    while

    • 语法
    【标签:】 while 循环条件 do
    	循环体;
    end while 【标签】;
    

    标签是用来做循环控制的,配合iterate和leave使用

    loop

    • 语法
    【标签:】 loop
    	循环体;
    end loop 【标签】;
    
    • 可以用来模拟简单的死循环
    • 如果想要退出,就得搭配leave

    repeat

    • 语法
    【标签:】 repeat
    	循环体;
    until 结束循环的条件
    end repeat 【标签】;
    

    有点类似do while

    案例

    1. 批量插入,根据次数插入到admin表中多条记录
    CREATE PROCEDURE pro_while1(IN insertcount INT)
    BEGIN
    	DECLARE i INT DEFAULT 1;
    	WHILE i<=insertcount DO
    		INSERT INTO admin(username,password) VALUES(CONCAT('Rose',i),'666');
    		SET i=i+1;
    	END WHILE;
    END $
    
    CALL pro_while1(100)$
    
    1. 添加leave语句:批量插入,根据次数插入到admin表中多条记录,如果次数大于20则停止
    TRUNCATE TABLE admin$
    CREATE PROCEDURE test_while1(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 a;
    END $
    
    CALL test_while1(100)$
    
    1. 添加iterate语句:批量插入,根据次数插入到admin表中多条记录,只插入偶数次
    TRUNCATE TABLE admin$
    DROP PROCEDURE test_while1$
    CREATE PROCEDURE test_while1(IN insertcount INT)
    BEGIN
    	DECLARE i INT DEFAULT 0;
    	a:WHILE i<=insertcount DO
    		SET i=i+1;
    		IF MOD(i,2)!=0 THEN ITERATE a;
    		END IF;
    
    		INSERT INTO admin(username,password) VALUES(CONCAT('xiaohua',i),'0000');
    
    	END WHILE a;
    END $
    
    CALL test_while1(100)$
    
  • 相关阅读:
    函数指针
    指针和数组的关系
    const修饰指针的三种效果
    指针做函数参数 (间接赋值是指针存在的最大意义)
    野指针
    指针
    JSP九大内置对象
    Android--获取App应用程序的大小
    Android--获取标题栏,状态栏,屏幕高度
    Android--获取使用的总流量和每个App的上传、下载的流量
  • 原文地址:https://www.cnblogs.com/sanmujun/p/12668191.html
Copyright © 2011-2022 走看看