欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【SQL练习】 计算并填写学生获得的总学分 本题目要求编写UPDATE语句, 计算每位学生已获得的总学分并填写在stu表中的totalcredit字段。

程序员文章站 2022-05-03 09:20:35
...

数据库上机练习

问题描述:

本题目要求编写UPDATE语句, 计算每位学生已获得的总学分并填写在stu表中的totalcredit字段。

其中,总学分为每个学生通过的选修课程的学分数总和,注意:只有在60分以上的选课成绩才能获得该门课程的学分数,每门课程的学分数在cou表中credit字段。

表结构:
请在这里写定义表结构的SQL语句。例如:

CREATE TABLE `stu` (
  `sno` char(4) NOT NULL,
  `sname` char(8) NOT NULL,
  `sex` tinyint(1) DEFAULT NULL,
  `mno` char(2) DEFAULT NULL,
  `birdate` datetime DEFAULT NULL,
  `memo` text,
  `totalcredit` smallint(6) DEFAULT NULL,
  PRIMARY KEY (`sno`)
);
CREATE TABLE `cou` (
  `cno` char(4) NOT NULL,
  `cname` varchar(30) NOT NULL,
  `credit` smallint(6) DEFAULT NULL,
  `ptime` char(5) DEFAULT NULL,
  `teacher` char(10) DEFAULT NULL,
  PRIMARY KEY (`cno`)
);
CREATE TABLE `sc` (
  `sno` char(4) NOT NULL,
  `cno` char(4) NOT NULL,
  `grade` decimal(6,1) DEFAULT NULL,
  `rank` char(255) DEFAULT NULL,
  PRIMARY KEY (`sno`,`cno`),
  CONSTRAINT `fk_sc_cno` FOREIGN KEY (`cno`) REFERENCES `cou` (`cno`),
  CONSTRAINT `fk_sc_sno` FOREIGN KEY (`sno`) REFERENCES `stu` (`sno`)
);

表样例
请在这里给出上述表结构对应的表样例。例如

【SQL练习】 计算并填写学生获得的总学分 本题目要求编写UPDATE语句, 计算每位学生已获得的总学分并填写在stu表中的totalcredit字段。
cou表:
【SQL练习】 计算并填写学生获得的总学分 本题目要求编写UPDATE语句, 计算每位学生已获得的总学分并填写在stu表中的totalcredit字段。
sc表:
【SQL练习】 计算并填写学生获得的总学分 本题目要求编写UPDATE语句, 计算每位学生已获得的总学分并填写在stu表中的totalcredit字段。

原因分析:

这个问题解决的关键在于怎么按码,改变相应元组的其他属性,正确的方法是用两张表

update A,B 
set A.x=B.x
where A.主码=B.主码

那么现在的问题是如何建立一个含有sum(credit)和sno的新表
代码如下

select sno,sum(credit) 
from(
	select stu.sno sno,case when sc.grade>=60 then credit else NULL end credit
	from stu left outer join sc on stu.sno=sc.sno left outer join cou on sc.cno=cou.cno
	group by stu.sno,credit,grade) a
group by sno

接下来的操作就是两张表的结合了,即可得到正确答案:

正确解答

UPDATE stu,(select sno,sum(credit) SUM
from(
	select stu.sno sno,case when sc.grade>=60 then credit else NULL end credit
	from stu left outer join sc on stu.sno=sc.sno left outer join cou on sc.cno=cou.cno
	group by stu.sno,credit,grade) a
group by sno) B
SET stu.totalcredit = B.SUM
where stu.sno = B.sno

点个关注吧,求求了,我会努力更新的。(上次的数理统计复习我会陆续上传的)