五月二十六日

936 字
5 分钟
五月二十六日

5.26#

# 环境 数据库:
use yggl;

1.创建存储过程

# 第1步:查出员工A的实际收入
# 第2步:查出员工B的实际收入
# 第3步:比较两个数字
# 第4步:根据比较结果,输出 01
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

image-20260526195754381
image-20260526195754381

2.调用存储过程(比较 000001 和 108991)

CALL CompareIncome('000001', '108991', @result);
# 把 '000001', '108991' 作为上面的 emp1 emp2 传递函数执行
# 把函数的执行结果 给 @result ,后续把 result 进行输出

3.输出结果

SELECT @result;
# 这是函数的执行结果
# 如果需要详细的数据 输入

image-20260526200046534
image-20260526200046534

三.写SQL命令

1.创建用户变量userl并赋值为1,user2赋值为2,user3赋值为3

SET @user1 = 1;
SET @user2 = 2;
SET @user3 = 3;
-- 查看变量值
SELECT @user1, @user2, @user3;
-- 非常简单的 使用 set + @ 进行定义bi'a

image-20260526214225020
image-20260526214225020

2.返回 KC 表中课程名最左边的 3 个字符

SELECT 课程名, LEFT(课程名, 3) AS 左边3字符 FROM KC;
# 按照题目要求 使用 LEFT(课程名, 3) 获取最左侧三个字符

image-20260526214347841
image-20260526214347841

3.显示 XS 表中所有女同学的姓名,一列显示姓氏,一列显示名

SELECT
LEFT(姓名, 1) AS 姓氏,
SUBSTRING(姓名, 2) AS 名字
FROM XS
WHERE 性别 = '1';
# 我忘记 女生是 0 还是 1了 如果是 0 记得修改

image-20260526214846680
image-20260526214846680

4.求 XS 表中女学生的年龄

SELECT
姓名,
出生时间,
YEAR(CURDATE()) - YEAR(出生时间) AS 年龄
FROM XS
WHERE 性别 = '1';
# 如果有显示 那个字段不存在 ,使用 DESC XS,查看表结构进行替换

image-20260526215049813
image-20260526215049813

5.返回 XS 表名字为两个字的学生

SELECT
姓名,
CASE 性别
WHEN 0 THEN '女'
WHEN 1 THEN '男'
END AS 性别,
专业名
FROM xs
WHERE CHAR_LENGTH(姓名) = 2;

image-20260526222853303
image-20260526222853303

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';

image-20260526223251578
image-20260526223251578

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';

image-20260526222643347
image-20260526222643347

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

五月二十六日
https://c7lz11.cn/posts/may_26th/
作者
Changed
发布于
2026-05-26
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
Changed
Hello, I'm Changed.
热爱技术,喜欢分享,喜欢音乐。
公告
图床使用的是cloudflare可能加载有些慢,可以使用魔法。
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
7
分类
1
标签
12
总字数
4,585
运行时长
0
最后活动
0 天前

文章目录