什么是sql编程
SQL 编程 指的是使用 SQL(Structured Query Language,结构化查询语言)编写用于操作和管理关系型数据库的指令 ,让程序或人工可以通过这些语句完成数据存储、查询、更新、统计和权限控制等工作。
| 类别 | 说明 | 常见语句 |
|---|---|---|
| 数据查询 | 从数据库中取数据 | SELECT |
| 数据操作 | 新增、修改、删除数据 | INSERT、UPDATE、DELETE |
| 结构定义 | 创建/修改表、字段、索引 | CREATE、ALTER、DROP |
| 权限控制 | 管理用户和访问权限 | GRANT、REVOKE |
条件判断语句
和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之间偶数的值
