热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[MySQL光速入门]018流程控制

流程控制所谓流程控制,无非就是分支和循环ifelse假设有一个教师表,有id,name,sex,salary四个字段(ID,姓名,性别,工资),根据不同的工资,分别显示不同的身份输

流程控制

所谓流程控制, 无非就是 分支循环

if else

假设有一个教师表, 有id,name,sex,salary四个字段(ID,姓名,性别,工资),

根据不同的工资, 分别显示不同的身份

输入id, 如果工资大于5000, 输出土豪, 如果小于1500, 输出low 逼,

如果1500到5000之间, 输出马马虎虎, 如果没有, 则显示''查无此人''

drop table if exists teacher;CREATE TABLE `teacher` (`id` int(11) NOT NULL auto_increment primary key,`salary` int(11) NOT NULL,`sex` tinyint(1) NOT NULL comment '1 for male, 2 for female',`name` char(10) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO `teacher`(`id`, `salary`, `sex`, `name`) VALUES (1, 1500, 1, '教师1');
INSERT INTO `teacher`(`id`, `salary`, `sex`, `name`) VALUES (2, 5500, 2, '教师2');
INSERT INTO `teacher`(`id`, `salary`, `sex`, `name`) VALUES (3, 6500, 2, '教师3');
INSERT INTO `teacher`(`id`, `salary`, `sex`, `name`) VALUES (4, 7500, 1, '教师4');
INSERT INTO `teacher`(`id`, `salary`, `sex`, `name`) VALUES (5, 8500, 2, '教师5');

sql语句如下

drop PROCEDURE if exists find_teacher;create PROCEDURE find_teacher(in tid int,out type varchar(10)) begin
declare teacher_salary int;
select salary into teacher_salary from teacher where id = tid;IF teacher_salary > 5000 THENset type = '土豪';
ELSEif teacher_salary <&#61; 5000 and teacher_salary >&#61; 1500 thenset type &#61; &#39;马马虎虎&#39;;
elseif teacher_salary <1500 thenset type &#61; &#39;low 逼&#39;;
elseif teacher_salary is null thenset type &#61; &#39;查无此人!!!&#39;;
END IF;end;call find_teacher(6,&#64;type);select &#64;type;

再举一个例子

成绩大于90, 学霸, 60到90之间, 继续努力, 小于60, 学渣

drop PROCEDURE if exists 评分;
create procedure 评分(in 分数 int)begin if 分数 >&#61; 90 then select &#39;学霸&#39;;elseif 分数 >&#61; 60 and 分数 <90 then select &#39;继续加油&#39;;else select &#39;学渣&#39;;end if;
end;
call 评分(97);

再再举一个例子

等公交, 车来了, 上车, 快来了, 继续等, 其他情况, 走起

drop PROCEDURE if exists 等公交;
create procedure 等公交(in 状态 char(10))begin if 状态 &#61; &#39;来了&#39; then select &#39;上公交&#39;;elseif 状态 &#61; &#39;快来了&#39; then select &#39;等公交&#39;;else select &#39;走起&#39;;end if;
end;
call 等公交(&#39;快来了&#39;);

case

同样是分支结构, case既可以处理固定的值, 也可以处理范围

原来我们是用1代表男性, 2 代表女性, 现在我想在查询的时候, 直接把1转换成男性, 把2转变成女性

原来的结果是这样的...

下面开始写sql语句

DROP PROCEDURE IF EXISTS select_teacher;
CREATE PROCEDURE select_teacher ( ) BEGINSELECT id, salary,CASE sex WHEN 1 THEN &#39;男性&#39; WHEN 2 THEN &#39;女性&#39; END AS &#39;sex&#39;,name FROM teacher;
END;
CALL select_teacher ( );

现在我们使用case, 再来改写一下之前的if else...

DROP PROCEDURE IF EXISTS select_teacher;
CREATE PROCEDURE select_teacher() BEGINSELECT id, salary,CASE sex WHEN 1 THEN &#39;男性&#39; WHEN 2 THEN &#39;女性&#39; END AS &#39;sex&#39;,CASEWHEN salary > 5000 THEN &#39;土豪&#39; WHEN salary >&#61; 1500 AND salary <&#61; 5000 THEN &#39;马马虎虎&#39; WHEN salary <1500 THEN &#39;low 逼&#39; END AS &#96;type&#96; FROM teacher;
END;
CALL select_teacher();

循环 loop, while, repeat

下面, 我们使用三种循环, 分别输出10遍"我爱你"

loop

drop PROCEDURE if exists love;
create PROCEDURE love() begin declare num int default 0;myloop:loopset num &#61; num &#43; 1;if num > 10 then leave myloop;end if;select num;select &#39;我爱你&#39;;end loop;
end;
call love();

while

drop PROCEDURE if exists love;
create PROCEDURE love() begin declare num int default 0;while num <10 doset num &#61; num &#43; 1;select num;select &#39;我爱你&#39;;end while;
end;
call love();

repeat

drop PROCEDURE if exists love;
create PROCEDURE love() begin declare num int default 0;repeatset num &#61; num &#43; 1;select num;select &#39;我爱你&#39;;until num > 9 end repeat;
end;
call love();

女朋友不满意, 还要你用三种循环输出10遍我错了

while do

drop procedure if exists 我错了;
create procedure 我错了() begin declare 计数 int default 0;while 计数<10do select 计数;select &#39;我错了...&#39;;set 计数 &#61; 计数 &#43; 1;end while;
end;
call 我错了();

loop

drop procedure if exists 我错了;
create procedure 我错了() begin declare 计数 int default 0;hello:loop select 计数;select &#39;我错了...&#39;;set 计数 &#61; 计数 &#43; 1;if 计数 >&#61; 10 then leave hello;end if;end loop;
end;
call 我错了();

repeat until

drop procedure if exists 我错了;
create procedure 我错了() begin declare 计数 int default 0;repeat select 计数;select &#39;我错了...&#39;;set 计数 &#61; 计数 &#43; 1;until计数 >&#61; 10end repeat;
end;
call 我错了();

iterate/leave

相当于 continuebreak

仅适用于循环(loop,repeat,while)

跳过和中断

循环输出1到11, 逢5过

drop PROCEDURE if exists test;
create PROCEDURE test() begin declare x int default 0;myloop:loopset x &#61; x &#43; 1;if x % 5 &#61; 0 then ITERATE myloop; end if;select x;if x> 10 then leave myloop; end if;end loop;
end;
call test();

今天的小作业

使用while,repeat,loop 三种方式, 计算从1加到100

提前告诉你, 结果是5050

所谓从1加到100, 就是...

1 &#43; 2 &#43; 3 &#43; 4 &#43; 5 &#43; 6 &#43; 7 &#43; 8 &#43; 9 &#43; 10 &#43; 11 &#43; 12 &#43; 13 &#43; 14 &#43; 15 &#43; 16 &#43; 17 &#43; 18 &#43; 19 &#43; 20 &#43; 21 &#43; 22 &#43; 23 &#43; 24 &#43; 25 &#43; 26 &#43; 27 &#43; 28 &#43; 29 &#43; 30 &#43; 31 &#43; 32 &#43; 33 &#43; 34 &#43; 35 &#43; 36 &#43; 37 &#43; 38 &#43; 39 &#43; 40 &#43; 41 &#43; 42 &#43; 43 &#43; 44 &#43; 45 &#43; 46 &#43; 47 &#43; 48 &#43; 49 &#43; 50 &#43; 51 &#43; 52 &#43; 53 &#43; 54 &#43; 55 &#43; 56 &#43; 57 &#43; 58 &#43; 59 &#43; 60 &#43; 61 &#43; 62 &#43; 63 &#43; 64 &#43; 65 &#43; 66 &#43; 67 &#43; 68 &#43; 69 &#43; 70 &#43; 71 &#43; 72 &#43; 73 &#43; 74 &#43; 75 &#43; 76 &#43; 77 &#43; 78 &#43; 79 &#43; 80 &#43; 81 &#43; 82 &#43; 83 &#43; 84 &#43; 85 &#43; 86 &#43; 87 &#43; 88 &#43; 89 &#43; 90 &#43; 91 &#43; 92 &#43; 93 &#43; 94 &#43; 95 &#43; 96 &#43; 97 &#43; 98 &#43; 99 &#43; 100

也可以试试从1加到1000...

快速跳转

  • [MySQL光速入门]017 存储过程中的"异常处理"
  • [MySQL光速入门]019 分别使用loop, while, repeat 来计算 从0加到100 答案

转:https://juejin.im/post/5cb80d62e51d456e7c0cdaf4



推荐阅读
  • 1.介绍有时候我们需要一些模拟数据来进行测试,今天简单记录下如何用存储过程生成一些随机数据。2.建表我们新建一张学生表和教师表如下:CREATETABLEstudent(idINT ... [详细]
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
  • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
    本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
  • MySQL 基础操作与优化
    本文详细介绍了 MySQL 的基础连接、数据库及表的操作,涵盖创建、修改、删除等常用命令,并深入解析了数据类型、列属性、索引、外键和存储引擎等内容。 ... [详细]
  • 深入解析MySQL中的七种JOIN查询
    本文详细介绍了MySQL中常用的七种JOIN查询方法,包括内连接、左外连接、右外连接、全外连接以及排除连接等,并通过实例进行说明。 ... [详细]
  • 优化SQL Server批量数据插入存储过程的实现
    本文介绍了一种改进的SQL Server存储过程,用于生成批量插入语句。该方法不仅提高了性能,还支持单行和多行模式,适用于SQL Server 2005及以上版本。 ... [详细]
  • 全面解析运维监控:白盒与黑盒监控及四大黄金指标
    本文深入探讨了白盒和黑盒监控的概念,以及它们在系统监控中的应用。通过详细分析基础监控和业务监控的不同采集方法,结合四个黄金指标的解读,帮助读者更好地理解和实施有效的监控策略。 ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • CSS高级技巧:动态高亮当前页面导航
    本文介绍了如何使用CSS实现网站导航栏中当前页面的高亮显示,提升用户体验。通过为每个页面的body元素添加特定ID,并结合导航项的类名,可以轻松实现这一功能。 ... [详细]
  • 本文介绍如何在MySQL中创建一个自定义函数,用于将包含多个班级编号的字符串拆分为对应的班级名称。通过详细解释代码逻辑和功能,帮助读者理解并应用这一技术。 ... [详细]
  • 本章详细介绍SP框架中的数据操作方法,包括数据查找、记录查询、新增、删除、更新、计数及字段增减等核心功能。通过具体示例和详细解析,帮助开发者更好地理解和使用这些方法。 ... [详细]
  • 本文详细介绍了 phpMyAdmin 的安装与配置方法,适用于多个版本的 phpMyAdmin。通过本教程,您将掌握从下载到部署的完整流程,并了解如何根据不同的环境进行必要的配置调整。 ... [详细]
  • 本文探讨了如何在Classic ASP中实现与PHP的hash_hmac('SHA256', $message, pack('H*', $secret))函数等效的哈希生成方法。通过分析不同实现方式及其产生的差异,提供了一种使用Microsoft .NET Framework的解决方案。 ... [详细]
  • 优化Flask应用的并发处理:解决Mysql连接过多问题
    本文探讨了在Flask应用中通过优化后端架构来应对高并发请求,特别是针对Mysql 'too many connections' 错误的解决方案。我们将介绍如何利用Redis缓存、Gunicorn多进程和Celery异步任务队列来提升系统的性能和稳定性。 ... [详细]
  • 本文将详细介绍如何在没有显示器的情况下,使用Raspberry Pi Imager为树莓派4B安装操作系统,并进行基本配置,包括设置SSH、WiFi连接以及更新软件源。 ... [详细]
author-avatar
康话口儿_536
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有