前言
SQL语言作为一个高级语言,和c语言一样,也有选择结构,只不过被叫做流程控制,作为基础语法,学好流程控制对开发也有很大的帮助。
一、顺序结构
顺序结构关键字:begin····end,相当于{······},是SQL语言中的复合语句。
顺序结构的基本格式:
begin sql1代码1; sql2代码; ······ end;
二.数据库变量
1.局部变量
– 定义局部变量的基本格式:
declare 变量名 数据类型;
– 变量的初始化
declare 变量名 数据类型 default 初始值;
– 给变量赋值:
set 变量名=变量值;
注意:局部变量只能在begin····end之间使用;
例如:
delimiter // create procedure sum3(in x int,in y int) begin declare z int default 0; -- 定义一个局部变量并初始化为0; set z=x+y; -- 给z赋值; select z as "两数的和"; end// delimiter ; call sum3(123,345);
2.用户变量
使用用户变量的一般格式:
set @变量名=变量值;
如:set @a=10; select @a; set @a='abc'; select @a; set @b="2000-1-20" select @b;
用户变量是弱类型,没有指定的数据类型,可以支持多种数据类型,可以理解为万用数据类型,用户变量只能在当前连接中使用,不同的数据库连接无法共用一个数据库变量,变量名相同也无法共用。下面用一组图片来解释。
第一次使用用户变量:
第二次继续使用第一次定义的用户变量:
对比两次的数据我们可以发现,第二次使用数据库的时候无法再使用第一次登录定义的用户变量,简单的来说,就是你第一次连接数据库定义的用户变量第二次连接后无法再使用。
– 用户变量应用举例:
-- 使用用户变量; delimiter // create procedure sum4(in x int,in y int,out z int) begin set z=x+y; end// set @a=10; set @b=390; call sum4(@a,@b,@c); select @c as"两数之和"; -- 用用户变量来接收存储过程返回的值;
3.会话变量
会话变量是系统自带的,是用来保存数据库当前会话的默认数据,当前连接有效,重新连接会恢复默认值,使用会话变量的基本格式:@@会话变量名;
查看当前连接的会话变量:show session variables;
4.全局变量
和会话变量一样,全局变量也是自带的,是用来保存数据库当前服务的默认数据,当前服务有效,重启服务后恢复默认值。使用全局变量的基本格式:
@@全局变量;
查看当前服务的全局变量:
show global variables;
三.分支选择结构
1.if else结构
①.if语句的基本格式:
if <判断条件> then <语句>; end if;
判断if之后的条件,如果条件满足则执行语句,否则不执行语句。(注意结束if需要用end if)。
②.if else语句的基本格式
if <判断条件> then <语句1> else <语句2>; end if;
判断条件后如果满足条件则执行语句1,否则执行语句2.
③.if else 嵌套的基本格式
if <判断条件1> then <语句1;> else if <判断条件2> then <语句2>; else if <判断条件3> then <语句3>; ··········· else then <语句n> end if;
例如:对学生成绩进行分类
#分支结构的使用 delimiter // create procedure get_grade1(in score float,out grade varchar(30)) begin declare s int default 0; set s=score div 10; -- 整除; if s=9 then set grade="优秀"; elseif s=8 then set grade="优"; elseif s=7 then set grade='良'; else if s=6 then set grade="及格"; else then set grade="不及格"; end if; end // delimiter ; call get_grade1(78,@ss); select @ss;
2.case多分支结构
case when多分支结构基本格式:
case 条件 when 值1 then 语句1; when 值2 then 语句2; when 值3 then 语句3; when 值4 then 语句4; ······ else 语句n+1 #相当于default end case;
判断case之后的条件,如果条件值于其中某个when之后的值相等,则执行when中then之后的语句,如果都不满足则执行else后面的语句。
和c语言中的switch。。case语句相似;
例如:
delimiter // create procedure sention(in score int) begin declare s int default 0; set s=score div 10; case s when 10 then select '满分' as 成绩等级; when 9 then select '优秀' as 成绩等级; when 8 then select '良好' 成绩等级; when 7 then select '及格' 成绩等级; when 6 then select '及格' 成绩等级; else select '不及格' 成绩等级; end case; end // delimiter ; call sention(99);