MySQL之sql编程(上)

什么是sql编程

SQL 编程 指的是使用 SQL(Structured Query Language,结构化查询语言)编写用于操作和管理关系型数据库的指令 ,让程序或人工可以通过这些语句完成数据存储、查询、更新、统计和权限控制等工作。

类别 说明 常见语句
数据查询 从数据库中取数据 SELECT
数据操作 新增、修改、删除数据 INSERTUPDATEDELETE
结构定义 创建/修改表、字段、索引 CREATEALTERDROP
权限控制 管理用户和访问权限 GRANTREVOKE

条件判断语句

和c++类似,sql编程里面有if ,else if ,else

根据分数的值,判定当前分数对应的等级

分数 >= 90 分等级为优秀

分数 >= 80 且分数 < 90分等级为良好

分数 >= 60 分且分数 < 80分等级为及格

分数 < 60分等级为不及格

sql 复制代码
delimiter //
CREATE PROCEDURE p5()
BEGIN
  DECLARE score int DEFAULT 85;
  DECLARE grade VARCHAR(10);

  IF score>=90 THEN
    set grade:='优秀';
  ELSEIF score >=80 AND score<90 THEN 
    set grade:='良好';
  ELSEIF score >=60 AND score<80 THEN     
    set grade:='及格';   
  ELSE
    set grade:='不及格';

  END IF;
   
 SELECT grade;

END //
delimiter ;

CALL p5();

更改score的值可以获得不同的grade

但是此时我们只能通过我们修改score的默认值,来完成grade的不同分级,如何解决呢?我们需要引入参数

参数 in out inout

参数类型 关键字 是否接收值 是否可修改 是否能返回值 使用频率 典型场景
输入参数 IN ✅ 是 ❌ 否 ❌ 否 ⭐⭐⭐⭐⭐ 查询条件、过滤条件
输出参数 OUT ❌ 否 ✅ 是 ✅ 是 ⭐⭐⭐ 返回计算结果、状态
输入输出参数 INOUT ✅ 是 ✅ 是 ✅ 是 累计、自增、状态变更

在使用过程中我们将参数放在创建存储过程的括号里面

eg:传入一个分数的值,判定当前分数对应的等级

调用时最核心的注意事项是必须使用自定义变量来接收输出参数,否则程序无法获取计算结果。

eg:传入一个分数的值,在传入分数的基础上加10分,然后返回

case语句

这里case和switch case有点相似

主要有以下两种写法

sql 复制代码
CASE 字段
    WHEN 值1 THEN 结果1
    WHEN 值2 THEN 结果2
    ELSE 默认结果
END
sql 复制代码
CASE
    WHEN 条件1 THEN 结果1
    WHEN 条件2 THEN 结果2
    ELSE 默认结果
END

eg::传入一个状态码,输出该状态码表示的含义

◦ 0:成功

◦ 10001:用户名或密码错误

◦ 10002:您没有对应的权限,请联系管理员

◦ 20001:你传入的参数有误

◦ 20002:没有找到相应的结果

eg:根据传入的月份,输出该月份属于哪个季度

◦ 1 ~ 3月为第一季度

◦ 4 ~ 6月为第一季度

◦ 7 ~ 9月为第一季度

◦ 1 ~ 12月为第一季度

循环语句

sql编程中存在三种循环,while,repeat,loop

sql 复制代码
WHILE 条件 DO
    循环体
END WHILE;

这里repeat和do while很相似

sql 复制代码
REPEAT
    循环体
UNTIL 条件 END REPEAT;

这个和c++中的while(ture)

sql 复制代码
循环名: LOOP
    IF 条件 THEN
        LEAVE 循环名;
    END IF;
END LOOP;

eg:传入一个数n,计算从1累加到n的值

eg::传入一个数n,计算从1累加到n的值(repeat)

eg::传入一个数n,计算从1累加到n的值(loop)

eg:传入一个数n,累加从1累加到n之间偶数的值