专栏首页Java 学习MySQL 中的流程控制语句

MySQL 中的流程控制语句

1.1 if 语句

1.1.1 语法

# 当条件表达式为 true 的时候,返回 值1,否则返回 值2
if(条件表达式, 值1, 值2); 

# 类似 java 中的 if ··· else if ··· else 【只能使用在 begin end 之间】
if 条件语句1 then 语句1;
elseif 条件语句2 then 语句2;
...
else 语句n;
end if;

1.1.2 示例

mysql> select * from student;
+----+-----+--------+
| id | sex | name   |
+----+-----+--------+
|  1 | 1   | 王大锤 |
|  2 | 0   | 萌妹子 |
|  3 | 0   | 小姐姐 |
|  4 | 1   | 牛魔王 |
+----+-----+--------+
4 rows in set (0.09 sec)


mysql> select id as '编号', if(sex = 1, '男', '女') as '性别', name as '姓名' from student;
+------+------+--------+
| 编号 | 性别 | 姓名   |
+------+------+--------+
|    1 | 男   | 王大锤 |
|    2 | 女   | 萌妹子 |
|    3 | 女   | 小姐姐 |
|    4 | 男   | 牛魔王 |
+------+------+--------+
4 rows in set (0.15 sec)


mysql> create procedure myif(a int)
begin
      declare sex varchar(20) default '男';
      declare a int default 1;
      if a = 1 then set sex = '男';
      elseif a = 0 then set sex = '女';
      end if;
      select sex;
end;

mysql> call myif(1);
+-----+
| sex |
+-----+
| 男  |
+-----+
1 row in set (0.20 sec)

Query OK, 0 rows affected (0.04 sec)

mysql> drop procedure if exists myif;
Query OK, 0 rows affected (0.05 sec)

1.2 case 语句

1.2.1 语法

# 第一种用法
case 表达式
	when 值1 then 结果1 或者 语句1	# 如果是语句需要加分号
	when 值2 then 结果2 或者 语句2
	...
else 结果n 或者 语句n
end [case] # 如果是放在 begin end 之间需要加 case,如果是在 select 后面 case 可以省略

# 第二种用法
case 
	when 条件1 then 结果1 或者 语句1 # 如果是语句需要加分号
	when 条件2 then 结果2 或者 语句2
	...
else 结果n 或者 语句n
end [case] 	# 如果是放在 begin end 之间需要加 case,如果是在 select 后面 case 可以省略

1.2.2 示例

# 第一种用法
# 类似 java 中的 switch ··· case
mysql> select id as '编号',(case sex when 1 then '男' when 0 then '女' end) as '性别',name as '姓名' from student;
+------+------+--------+
| 编号 | 性别 | 姓名   |
+------+------+--------+
|    1 | 男   | 王大锤 |
|    2 | 女   | 萌妹子 |
|    3 | 女   | 小姐姐 |
|    4 | 男   | 牛魔王 |
+------+------+--------+
4 rows in set (0.20 sec)

# 类似 java 中的 switch ··· case ··· default
mysql> select id as '编号',(case sex when 1 then '男' else '女' end) as '性别',name as '姓名' from student;
+------+------+--------+
| 编号 | 性别 | 姓名   |
+------+------+--------+
|    1 | 男   | 王大锤 |
|    2 | 女   | 萌妹子 |
|    3 | 女   | 小姐姐 |
|    4 | 男   | 牛魔王 |
+------+------+--------+
4 rows in set (0.18 sec)


# 第二种用法
mysql> select id '编号',(case when sex = 1 then '男' when sex = 0 then '女' end) '性别',name '姓名' from student;
+------+------+--------+
| 编号 | 性别 | 姓名   |
+------+------+--------+
|    1 | 男   | 王大锤 |
|    2 | 女   | 萌妹子 |
|    3 | 女   | 小姐姐 |
|    4 | 男   | 牛魔王 |
+------+------+--------+
4 rows in set (0.20 sec)

1.3 循环

1.3.1 while 循环

语法

标签:while 循环条件 do
	循环体
end while 标签;

说明  ① 标签是给 while 取个名字,标签和 iterate、leave 结合用于在循环内部对循环进行控制。  ② 个循环先判断条件,条件成立之后,才会执行循环体,每次执行都会先进行判断。

循环控制

# 类似 java中的 continue
iterate 循环标签;

# 类似 java 中的 break
leave 循环标签;

示例

# 求 1 ~ n 的和
# 创建存储过程
mysql> create procedure sumnum(a int) 
    begin
    	# default 是指定该变量的默认值
        declare sum int default 0;  
        declare i int default 1;
    while i<=a do # 循环开始
        set sum = sum + i;
        set i = i + 1;
    end while; # 循环结束
    select sum;  # 输出结果
    end;
Query OK, 0 rows affected (0.06 sec)

# 执行存储过程
mysql> call sumnum(100);
+------+
| sum  |
+------+
| 5050 |
+------+
1 row in set (0.08 sec)
Query OK, 0 rows affected (0.04 sec)

# 删除存储过程
mysql> drop procedure if exists sumnum;
Query OK, 0 rows affected (0.05 sec)

1.3.2 loop 循环

语法

# 死循环
标签:loop
循环体;
end loop 标签;

示例

# 求 1 ~ n 的和
# 创建存储过程
mysql> create procedure sumnum(a int)
begin
        declare sum int default 0;
        declare i int default 1;
        loop_name:loop # 循环开始
            if i > a then 
                leave loop_name;  # 结束循环,类似于 break
            end if;
            set sum = sum + i;
            set i = i + 1;
        end loop;  # 循环结束
        select sum; # 输出结果
end;
Query OK, 0 rows affected (0.06 sec)

# 执行存储过程
mysql> call sumnum(100);
+------+
| sum  |
+------+
| 5050 |
+------+
1 row in set (0.09 sec)
Query OK, 0 rows affected (0.04 sec)

# 删除存储过程
mysql> drop procedure if exists  sumnum;
Query OK, 0 rows affected (0.07 sec)

1.3.3 repeat 循环

  repeat 循环类似于 java 中的 do ··· while 循环,不管如何,循环都会先执行一次,然后再判断结束循环的条件,不满足结束条件,循环体继续执行。这跟和 while 循环不同,while 是先判断条件是否成立再执行循环体。

语法

标签:repeat
	循环体;
until 结束循环的条件 end repeat 标签;

示例

# 求 1 ~ n 的和
# 创建存储过程
mysql> create procedure sumnum(a int)
  begin
       declare sum int default 0;
       declare i int default 1;
       repeat # 循环开始
           set sum = sum + i;
           set i = i + 1;
       until i > a end repeat; # 循环结束
       select sum; # 输出结果
  end;
Query OK, 0 rows affected (0.06 sec)

# 执行存储过程
mysql> call sumnum(100);
+------+
| sum  |
+------+
| 5050 |
+------+
1 row in set (0.10 sec)
Query OK, 0 rows affected (0.04 sec)

# 删除存储过程
mysql> drop procedure if exists sumnum;
Query OK, 0 rows affected (0.07 sec)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • DOM 又是个什么鬼?

      DOM(Document Object Model 即:文档对象模型),是一项 W3C 标准,是针对 HTML 和 XML 的一个 API(应用程序接口)。...

    Demo_Null
  • MySQL 存储过程

      MySQL 5.0 版本开始支持存储过程。存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。存储过...

    Demo_Null
  • MySQL 常用函数汇总

    函数不能单独存在,需要与 select 等操作连用,否则会报错。 mysql> rand(); 1064 - You have an error in yo...

    Demo_Null
  • mysql-完整性约束

    mysql> create table tb1(id int not null default 2,num int not null);  # 创建tb1表并约...

    py3study
  • MySQL 之事务

    什么是事务? 事务是程序中一系列严密的操作,所有操作执行必须成功完成,否则在每个操作所做的更改将会被撤销,这也是事务的原子性(要么成功,要么失败)。

    小手冰凉
  • LeetCode 1217. 玩筹码(脑筋急转弯)

    Michael阿明
  • Python3分析MySQL数据库

    1.在bash_profile中配置全局环境变量 终端open ~/.bash_profile打开环境变量配置文件,写入:

    用户1250179
  • Employee Free Time

    思路: 大致题意是求所有区间的并集的补集。先根据区间的start排序,假设当前区间为now,那么如果新来的区间start在now区间表示的范围内,说明两个区...

    用户1147447
  • 【刘文彬】RPC的基础:调研EOS插件http_plugin

    原文链接:醒者呆的博客园,https://www.cnblogs.com/Evsward/p/httpPlugin.html

    圆方圆学院
  • RPC的基础:调研EOS插件http_plugin

    EOS中,一个插件的使用要先获取其实例,例如http_plugin获取实例的语句是:

    文彬

扫码关注云+社区

领取腾讯云代金券