mysql - 流程控制
顺序结构
分支结构
循环结构
分支结构:
1. if
if(表达式1,表达式2,表达式3)
如果:表达式1 = true,则执行表达式2;
如果:表达式1 = false,则执行表达式3;
SET @a = 2; SELECT IF(@a = 3,NAME,money) FROM account WHERE userid = 1;
if 条件
then 语句
else
语句
end if;
2.case
1.类似于switch case结构
case 变量(或表达式)
when 值1 then 语句;
when 值2 then 语句;
。。。
else 语句;
end case;
DELIMITER $$ CREATE PROCEDURE pro_test1(IN a INT) BEGIN SET @a = a; CASE @a WHEN 1 THEN SELECT 'A'; WHEN 2 THEN SELECT 'B'; WHEN 3 THEN SELECT 'C'; ELSE SELECT 'D'; END CASE; END $$ DELIMITER ; CALL pro_test1(2);
2.类似于if else结构
case
when 条件1 then 语句;
when 条件2 then 语句;
。。。
else 语句;
end case;
DELIMITER $$ CREATE PROCEDURE pro_test2(IN a INT) BEGIN SET @a = a; CASE WHEN @a = 1 THEN SELECT 'A'; WHEN @a = 2 THEN SELECT 'B'; WHEN @a = 3 THEN SELECT 'C'; ELSE SELECT 'D'; END CASE; END $$ DELIMITER ; CALL pro_test1(2);
else相当于java中的default,可以省略,如果都不符合返回null。
循环结构
while java中的while while 循环条件 do 语句; end while;
loop java中的while(true) 需要利用leave来停止
repeat java中的do while repeat 语句 until 停止条件 end repeat
interate java中的continue 跳过这次循环,进入下一次循环
leave java中的break 结束当前循环 最好后面加上循环的标识名字= =我的 sqlyog 不加循环名字会报错。。。
用循环做乘积
num1 个 num2 相加返回 result
1.while
DELIMITER $$ CREATE PROCEDURE pro_test_while(IN num1 INT, IN num2 INT, OUT result INT) BEGIN DECLARE i INT; SET i = 0; SET result = 0; WHILE i < num1 DO SET i = i + 1; SET result = result + num2; END WHILE; END $$ DELIMITER ; CALL pro_test_while(12,13,@re); SELECT @re;
2. loop
DELIMITER $$ CREATE PROCEDURE pro_test_loop(IN num1 INT, IN num2 INT, OUT result INT) BEGIN DECLARE i INT; SET i = 0; SET result = 0; l1: LOOP IF i = num1 THEN LEAVE l1; ELSE SET i = i + 1; SET result = result + num2; END IF; END LOOP l1; END $$ DELIMITER ; CALL pro_test_loop(12,13,@re); SELECT @re;
3.repeat
DELIMITER $$ CREATE PROCEDURE pro_test_repeat(IN num1 INT, IN num2 INT, OUT result INT) BEGIN DECLARE i INT; SET i = 0; SET result = 0; REPEAT SET i = i + 1; SET result = result + num2; UNTIL i = num1 END REPEAT; END $$ DELIMITER ; CALL pro_test_repeat(12,13,@re); SELECT @re;
游标:
类似于java中的指针 和 foreach(Object o: ArrayList<Object> arr) 中的o
DELIMITER $$ CREATE PROCEDURE pro_test_cursor(IN p_uid1 INT, IN p_uid2 INT, OUT p_result VARCHAR(400)) BEGIN DECLARE p_uid INT; DECLARE p_uname VARCHAR(20); DECLARE p_done INT DEFAULT 0; DECLARE p_c CURSOR FOR SELECT uid, username FROM userinfo; #定义游标c,c每次表示了查询结果中的一行结果。 DECLARE CONTINUE HANDLER FOR NOT FOUND SET p_done=1; SET p_result = 'aaa'; OPEN p_c; #打开游标 SELECT p_done, p_uid, p_uid1, p_uid2; #执行到这里时输出查询结果,可以用来调试bug l1: LOOP FETCH p_c INTO p_uid, p_uname; #把当前游标指向的这一条结果赋给变量进行处理,同时游标会挪到下一行。因此需要在这句执行完后判断done = 1,否则最后一条会多处理一遍。 #之前用uid作为变量名,发现会导致uid = null。可能不能和属性名一样。 IF p_done = 1 THEN LEAVE l1; END IF; #当done = 1时,说明已经找到了最后,直接leave #没有leave时,进行判断和处理 IF p_uid = p_uid1 OR p_uid = p_uid2 THEN SET p_result = CONCAT(p_result, '|', p_uname); END IF; END LOOP l1; CLOSE p_c; #关闭游标 END $$ DELIMITER ; CALL pro_test_cursor(2,8,@re); SELECT @re;
原文地址:https://www.cnblogs.com/clamp7724/p/11803969.html
- Zookeeper 原理与实践
- 修改 mysql/oracle/bash/vimrc/cmd 提示符格式与颜色
- shell 学习笔记(17)
- 关于 xargs 参数被截断,tar 文件被覆盖的问题
- 一些sql用法例子【Updating】
- 关于腾讯的一道字符串匹配的面试题
- Sort Map by Value in Java
- java 利用反射模拟动态语言的 eval 函数
- Spark函数讲解: combineByKey
- hadoop 里执行 MapReduce 任务的几种常见方式
- Pig、Hive、MapReduce 解决分组 Top K 问题
- Pig、Hive 自定义输入输出分隔符以及Map、Array嵌套分隔符冲突问题
- 新手教程:局域网DNS劫持实战
- 自定义 java 日期、时间 处理函数集
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- Pytorch上下采样函数–interpolate用法
- scrapy框架携带cookie访问淘宝购物车功能的实现代码
- 浅析Python __name__ 是什么
- PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
- PHP后期静态绑定实例浅析
- php+mysql开发中的经验与常识小结
- PHP时间戳和日期相互转换操作实例小结
- php json转换相关知识(小结)
- PHP单例模式应用示例【多次连接数据库只实例化一次】
- 踩坑:pytorch中eval模式下结果远差于train模式介绍
- Python读取二进制文件代码方法解析
- Python3 webservice接口测试代码详解
- php往mysql中批量插入数据实例教程
- PHP类与对象后期静态绑定操作实例详解
- PHP后期静态绑定之self::限制实例分析