前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL 中的流程控制语句

MySQL 中的流程控制语句

作者头像
Demo_Null
发布2020-09-28 17:43:43
1.6K0
发布2020-09-28 17:43:43
举报
文章被收录于专栏:Java 学习Java 学习

1.1 if 语句

1.1.1 语法

代码语言:javascript
复制
# 当条件表达式为 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 示例

代码语言:javascript
复制
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 语法

代码语言:javascript
复制
# 第一种用法
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 示例

代码语言:javascript
复制
# 第一种用法
# 类似 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 循环

语法

代码语言:javascript
复制
标签:while 循环条件 do
	循环体
end while 标签;

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

循环控制

代码语言:javascript
复制
# 类似 java中的 continue
iterate 循环标签;

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

示例

代码语言:javascript
复制
# 求 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 循环

语法

代码语言:javascript
复制
# 死循环
标签:loop
循环体;
end loop 标签;

示例

代码语言:javascript
复制
# 求 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 是先判断条件是否成立再执行循环体。

语法

代码语言:javascript
复制
标签:repeat
	循环体;
until 结束循环的条件 end repeat 标签;

示例

代码语言:javascript
复制
# 求 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)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-07-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.1 if 语句
    • 1.1.1 语法
      • 1.1.2 示例
      • 1.2 case 语句
        • 1.2.1 语法
          • 1.2.2 示例
          • 1.3 循环
            • 1.3.1 while 循环
              • 1.3.2 loop 循环
                • 1.3.3 repeat 循环
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档