zoukankan      html  css  js  c++  java
  • lyt经典版MySQL基础——流程控制结构

      1 #流程控制结构
      2 /*
      3 顺序结构:程序从上往下依次执行
      4 分支结构:程序从两条或多条路径中选择一条去执行
      5 循环结构:程序在满足一定条件的基础上,重复执行一段代码
      6 
      7 */
      8 
      9 #一、分支结构
     10 #1.if函数
     11 /*
     12 功能:实现简单的双分支
     13 语法:
     14 if(表达式1,表达式2,表达式3)
     15 执行顺序:
     16 如果表达式1成立,则if函数返回表达式2的值,否则返回表达式3的值
     17 
     18 应用:任何地方
     19 */
     20 
     21 #2.case结构
     22 /*
     23 情况1:类似于java中的switch语句,一般用于实现等值判断
     24 
     25 语法:
     26     case 变量|表达式|字段
     27     when 要判断的值 then 返回的值1或语句1 ;
     28     when 要判断的值 then 返回的值2或语句2 ;
     29     ...
     30     else 要返回的值n或语句n ;
     31     end case ;
     32     
     33 情况2:类似于java中的多重if语句,一般用于实现区间判断
     34 
     35 语法:
     36     CASE 
     37     WHEN 要判断的条件1 THEN 返回的值1或语句1;
     38     WHEN 要判断的条件2 THEN 返回的值2或语句2;
     39     ...
     40     ELSE 要返回的值n或语句n;
     41     END case;
     42     
     43 特点:
     44 (1)
     45 可以作为表达式,嵌套在其他语句中使用,可以放在任何地方,begin end 中或 begin end 的外面;
     46 可以作为独立的语句使用
     47 (2)
     48 如果when中的值满足或条件成立,则执行对应的then后面的语句,并且结束case;
     49 如果都不满足,则执行else中的语句或值
     50 (3)
     51 else可以省略,如果else省略了,并且所有when条件都不满足,则返回null
     52 */
     53 
     54 #案例
     55 #创建存储过程,根据传入的成绩,来显示等级,比如传入的成绩:90-100,显示A;80-90,显示B;
     56 #60-80,显示C;否则显示D
     57 DELIMITER $
     58 CREATE PROCEDURE test_case1(IN score INT)
     59 BEGIN
     60     CASE
     61     WHEN score>=90 AND score<=100 THEN SELECT 'A';
     62     WHEN score>=80 THEN SELECT 'B';
     63     WHEN score>=60 THEN SELECT 'C';
     64     ELSE SELECT 'D';
     65     END CASE; 
     66 END $
     67 
     68 CALL test_case1(55)$
     69 
     70 #3.if结构
     71 /*
     72 功能:实现多重分支
     73 
     74 语法:
     75 if 条件1 then 语句1;
     76 elseif 条件2 then 语句2;
     77 ...
     78 【else 语句n;】
     79 end if;
     80 
     81 应用在begin end中
     82 */
     83 
     84 #案例1:根据传入的成绩,来显示等级,比如传入的成绩:90-100,返回A;80-90,显示B;
     85 #60-80,显示C;否则显示D
     86 DELIMITER $
     87 CREATE FUNCTION test_if(score INT) RETURNS CHAR
     88 BEGIN
     89     IF score>=90 AND score<=100 THEN RETURN 'A';
     90     ELSEIF score>=80 THEN RETURN 'B';
     91     ELSEIF score>=60 THEN RETURN 'C';
     92     ELSE RETURN 'D';
     93     END IF;
     94 END$
     95 
     96 SELECT test_if(79)$
     97 
     98 #二、循环结构
     99 /*
    100 分类:
    101 while、loop、repeat
    102 
    103 循环控制:
    104 iterate 类似于 continue,继续,结束本次循环,继续下一次
    105 leave 类似于 break,跳出,结束当前所在的循环
    106 */
    107 
    108 #1.while
    109 /*
    110 语法:
    111 【标签:】while 循环条件 do
    112       循环体;
    113       end while【标签】;
    114       
    115 联想:
    116 while(循环条件){
    117     循环体;
    118 }
    119 */
    120 
    121 #2.loop
    122 /*
    123 语法:
    124 【标签:】loop
    125       循环体;
    126       end loop 【标签】;
    127       
    128 可以用来模拟简单的死循环
    129 */
    130 
    131 #3.repeat
    132 /*
    133 语法:
    134 【标签:】repeat
    135      循环体;
    136      until 结束循环的条件
    137      end repeat 【标签】;
    138 */
    139 
    140 #没有添加循环控制语句
    141 #案例:批量插入,根据次数插入到admin表中多条记录
    142 DELIMITER $
    143 CREATE PROCEDURE pro_while1(IN insertCount INT)
    144 BEGIN
    145     DECLARE i INT DEFAULT 1;
    146     WHILE i<=insertCount DO
    147         INSERT INTO admin(username,PASSWORD) VALUES(CONCAT('Rose',i),'666');
    148         SET i=i+1;
    149     END WHILE;
    150 END$
    151 
    152 CALL pro_while1(100)$
    153 
    154 /*
    155 int i=1;
    156 while(i<=insertCount){
    157     //插入
    158     i++;
    159 }
    160 */
    161 
    162 #2.添加leave语句
    163 #案例1:批量插入,根据次数插入到admin表中多条记录,如果次数>20则停止
    164 TRUNCATE TABLE admin$
    165 DROP PROCEDURE IF EXISTS test_while1$
    166 DELIMITER $
    167 CREATE PROCEDURE test_while1(IN insertCount INT)
    168 BEGIN
    169     DECLARE i INT DEFAULT 1;
    170     a:WHILE i<=insertCount DO
    171         INSERT INTO admin(username,PASSWORD) VALUES(CONCAT('xiaohua',i),'0000');
    172         IF i>=20 THEN LEAVE a;
    173         END IF;
    174         SET i=i+1;
    175     END WHILE a;
    176 END$
    177 
    178 CALL test_while1(100)$
    179 
    180 #案例2:批量插入,根据次数插入到admin表中多条记录,只插入偶数次
    181 DELIMITER $
    182 CREATE PROCEDURE test_while1(IN insertCount INT)
    183 BEGIN
    184     DECLARE i INT DEFAULT 0;
    185     a:WHILE i<=insertCount DO
    186         SET i=i+1;
    187         IF MOD(i,2)!=0 THEN ITERATE a;
    188         END IF;
    189         INSERT INTO admin(username,PASSWORD) VALUES(CONCAT('xiaohua',i),'0000');
    190     END WHILE a;
    191 END$
    192 
    193 CALL test_while1(100)$
    194 /*
    195 int i=0;
    196 while(i<=insertCount){
    197     i++;
    198     if(i%2==0){
    199         continue;
    200     }
    201     插入
    202 }    
    203 */
    204 
    205 #经典案例面试题
    206 /*1、已知表stringcontent
    207 其中字段:
    208 id 自增长
    209 content varchar(20)
    210 向该表插入指定个数的,随机的字符串
    211 */
    212 DROP TABLE IF EXISTS stringcontent;
    213 CREATE TABLE IF NOT EXISTS stringcontent(
    214     id INT PRIMARY KEY AUTO_INCREMENT,
    215     content VARCHAR(20));
    216 DESC stringcontent;
    217 DELIMITER $
    218 CREATE PROCEDURE test_randstr_insert(IN insertcount INT)
    219 BEGIN
    220     DECLARE i INT DEFAULT 1; #定义一个循环变量i,表示插入次数
    221     DECLARE str VARCHAR(26) DEFAULT 'abcdefghijklmnopqrstuvwxyz';
    222     DECLARE startIndex INT DEFAULT 1; #代表起始索引
    223     DECLARE len INT DEFAULT 0; #代表截取的字符的长度
    224     WHILE(i<=insertcount)DO
    225         SET startIndex=FLOOR(RAND()*26+1); #产生一个随机的整数,代表起始索引1 ~ 26
    226         SET len=FLOOR(RAND()*(26-startIndex+1)+1); #产生一个随机的整数,代表 截取长度,1 ~ 26-startIndex+1
    227         INSERT INTO stringcontent(content) VALUES(SUBSTR(str,startIndex,len));
    228         SET i=i+1; #循环变量更新
    229     END WHILE;
    230 END$
    231 
    232 CALL test_randstr_insert(10)$
  • 相关阅读:
    LeetCode
    LeetCode
    static,final,包,访问修饰符,内部类
    抽象类和抽象方法接口和多态
    抽象类和抽象方法
    memcache的使用、版本使用和相关配置
    apache mysql无法启动解决办法
    thinkphp实现文件的下载
    xampp 出现403 无法访问问题(已解决)
    Thinkphp使用phpexcel导入文件并写入数据库
  • 原文地址:https://www.cnblogs.com/yanwuliu/p/13406214.html
Copyright © 2011-2022 走看看