学生作业完成情况管理程序

网上看到的一个课程设计,正好练练手。
 

首先设计数据库
       
数据库有三张表,分别是班级表,学生表,作业成绩表。
        学生表中外键关联班级表,作业成绩表中外键关联学生表。具体如下图所示
班级表

学生表
学生表外键关联
 作业成绩表

作业成绩表外键关联

 第二步:根据需求实现SQL语句

2.1 输入学生成绩

这里插入学生的成绩

INSERT INTO Job (jobName, score, stuID)
SELECT 
    '作业二' AS jobName,          -- 第几次作业
    60 AS score,                  -- 作业分数
    s.id AS stuID                 -- 学生ID,从student表中查找
FROM 
    student s
WHERE 
    studentID = 3;              	-- 根据学号插入分数

 2.2  给定学号,显示某位学生作业完成情况

SELECT student.name, Job.score
FROM Job
JOIN student ON Job.stuID = student.studentID
WHERE stuID = (SELECT id 
								FROM	student
								WHERE studentID = 1)
ORDER BY Job.jobName;									--按照作业次序排名

输出如下:

2.3  给定班级,显示这个班所有学生的成绩完成情况

SELECT student.name AS '姓名',
			 Job.jobName AS '作业次数',
			 Job.score AS '分数'
FROM student
JOIN Job ON Job.stuID = student.id 
WHERE student.classID = (SELECT id 
													FROM	class
													WHERE className = '一班');

输出如下:

2.4  给定学号,修改某位同学的作业信息。

UPDATE Job
SET score = 90
WHERE stuID = (SELECT id 
								FROM	student
								WHERE studentID = 1);

2.5  给定某位学生学号,删除该学生信息。

DELETE FROM student
WHERE student.studentID = 3;

分析:
        因为前面设置Job表的外键时,使用的是CASCADE,所以这里可以实现删除主键,关联的外键信息自动删除。

2.6  统计各类信息

2.6.1 所有学生的作业总分数(每次占分10%)

SELECT s.name AS '姓名',
			 SUM(j.score) * 0.1 AS '分数'
FROM student AS s
JOIN Job AS j ON j.stuID = s.id
GROUP BY s.id;


2.6.2  各班级总分数平均分

SELECT c.className AS '班级',
			 AVG(j.score) * 0.1 AS '平均分数'
FROM student AS s
JOIN Job AS j ON j.stuID = s.id
JOIN class AS c ON s.classID = c.id
GROUP BY s.classID;


   
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值