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)