五月二十六日
936 字
5 分钟
五月二十六日
5.26
# 环境 数据库:use yggl;1.创建存储过程
# 第1步:查出员工A的实际收入# 第2步:查出员工B的实际收入# 第3步:比较两个数字# 第4步:根据比较结果,输出 0 或 1
DELIMITER //
CREATE PROCEDURE CompareIncome( IN emp1 CHAR(6), IN emp2 CHAR(6), OUT result INT)BEGIN DECLARE income1 FLOAT(8,2); DECLARE income2 FLOAT(8,2);
SELECT 收入 - 支出 INTO income1 FROM salary WHERE 员工编号 = emp1;
SELECT 收入 - 支出 INTO income2 FROM salary WHERE 员工编号 = emp2;
IF income1 > income2 THEN SET result = 0; ELSE SET result = 1; END IF;END //
DELIMITER ;# CREATE PROCEDURE CompareIncome 定义了一个 叫做 CompareIncome的函数# 定义了2个 emp1 emp2 ,参数# DECLARE = 声明变量#income1 = 用来存放第一个员工的实际收入#income2 = 用来存放第二个员工的实际收入
# SELECT 收入 - 支出 = 计算实际收入(收入减去支出)# INTO income1 = 把计算结果存入变量 income1# FROM salary = 从工资表查询# WHERE 员工编号 = emp1 = 查询传入的那个员工# 举例: 如果 emp1 = '000001',收入=2100.80,支出=123.09,则 income1 = 1977.71
# 最后把 结果大的只设置为 0
2.调用存储过程(比较 000001 和 108991)
CALL CompareIncome('000001', '108991', @result);# 把 '000001', '108991' 作为上面的 emp1 emp2 传递函数执行# 把函数的执行结果 给 @result ,后续把 result 进行输出3.输出结果
SELECT @result;# 这是函数的执行结果# 如果需要详细的数据 输入
三.写SQL命令
1.创建用户变量userl并赋值为1,user2赋值为2,user3赋值为3
SET @user1 = 1;SET @user2 = 2;SET @user3 = 3;
-- 查看变量值SELECT @user1, @user2, @user3;-- 非常简单的 使用 set + @ 进行定义bi'a
2.返回 KC 表中课程名最左边的 3 个字符
SELECT 课程名, LEFT(课程名, 3) AS 左边3字符 FROM KC;# 按照题目要求 使用 LEFT(课程名, 3) 获取最左侧三个字符
3.显示 XS 表中所有女同学的姓名,一列显示姓氏,一列显示名
SELECT LEFT(姓名, 1) AS 姓氏, SUBSTRING(姓名, 2) AS 名字FROM XSWHERE 性别 = '1';
# 我忘记 女生是 0 还是 1了 如果是 0 记得修改
4.求 XS 表中女学生的年龄
SELECT 姓名, 出生时间, YEAR(CURDATE()) - YEAR(出生时间) AS 年龄FROM XSWHERE 性别 = '1';# 如果有显示 那个字段不存在 ,使用 DESC XS,查看表结构进行替换
5.返回 XS 表名字为两个字的学生
SELECT 姓名, CASE 性别 WHEN 0 THEN '女' WHEN 1 THEN '男' END AS 性别, 专业名FROM xsWHERE CHAR_LENGTH(姓名) = 2;
6.创建存储过程(删除特定学生信息)
DELIMITER //
CREATE PROCEDURE DeleteStudent( IN XH CHAR(6))BEGIN -- 先删除选课成绩记录 DELETE FROM xs_kc WHERE 学号 = XH;
-- 再删除学生基本信息 DELETE FROM xs WHERE 学号 = XH;END //
DELIMITER ;
# 执行函数CALL DeleteStudent('081102');
# 函数删除后 查看结果
SELECT * FROM xs WHERE 学号 = '081102';SELECT * FROM xs_kc WHERE 学号 = '081102';
7.创建存储过程(修改学分)
DELIMITER //
CREATE PROCEDURE UpdateCredit( IN XH CHAR(6), -- 学号 IN KCH CHAR(3) -- 课程号)BEGIN DECLARE score TINYINT; DECLARE course_credit INT;
-- 查询该学生该门课程的成绩 SELECT 成绩 INTO score FROM xs_kc WHERE 学号 = XH AND 课程号 = KCH;
-- 查询该门课程的学分 SELECT 学分 INTO course_credit FROM kc WHERE 课程号 = KCH;
-- 根据成绩修改学分 IF score < 60 THEN UPDATE xs_kc SET 学分 = 0 WHERE 学号 = XH AND 课程号 = KCH; ELSE UPDATE xs_kc SET 学分 = course_credit WHERE 学号 = XH AND 课程号 = KCH; END IF;END //
DELIMITER ;
# 由于我的 xs_kc 没有数据 ,我自己补充了一些
#调用上面定义的函数 ,传入参数CALL UpdateCredit('081102', '101');CALL UpdateCredit('081102', '102');
# 查看结果SELECT * FROM xs_kc WHERE 学号 = '081102';
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
相关文章 智能推荐
1
从零开始搭建一个最简单的NestJS应用
文章示例 记录学习NestJS过程
2
实验4
文章示例 2026-01-28
3
文件测试
文章示例 项目部署 测试markdown渲染。
4
vue-office 学习记录
文章示例 使用vue-offce导入pdf文件在线查看
5
分享一个自己Zsh的主题配置
文章示例 自定义主题。
随机文章 随机推荐