【SQL练习】 计算并填写学生获得的总学分 本题目要求编写UPDATE语句, 计算每位学生已获得的总学分并填写在stu表中的totalcredit字段。
数据库上机练习
问题描述:
本题目要求编写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`)
);
表样例
请在这里给出上述表结构对应的表样例。例如
cou表:
sc表:
原因分析:
这个问题解决的关键在于怎么按码,改变相应元组的其他属性,正确的方法是用两张表
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 creditfrom stu left outer join sc on stu.sno=sc.sno left outer join cou on sc.cno=cou.cnogroup 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 creditfrom stu left outer join sc on stu.sno=sc.sno left outer join cou on sc.cno=cou.cnogroup by stu.sno,credit,grade) a
group by sno) B
SET stu.totalcredit = B.SUM
where stu.sno = B.sno
点个关注吧,求求了,我会努力更新的。(上次的数理统计复习我会陆续上传的)
【SQL练习】 计算并填写学生获得的总学分 本题目要求编写UPDATE语句, 计算每位学生已获得的总学分并填写在stu表中的totalcredit字段。相关推荐
- 在mysql中如何建立性别约束_在Access2010数据库中,要在表中建立“性别”字段,并按与要求用逻辑值表示,其数据类型应当是()_学小易找答案...
[填空题]在Access2010数据库中,表结构的设计和维护是在表的()视图中完成的. [单选题]在Access2010数据库的下列字段类型中,字段大小不固定的是() [单选题]对Access2010 ...
- SQL 触发器 当修改TEST表中的F1字段时,同时根据条件修改F2字段
Code --当外修改TEST表中的F1字段时,同时根据条件修改F2字段 ALTER TRIGGER [dbo].[updatetest1] ON [dbo].[TEST] FOR INSERT, ...
- mysql 查询指定字段数据_MySQL使用select语句查询指定表中指定列(字段)的数据
本文介绍mysql数据库中执行select查询语句,查询指定列的数据,即指定字段的数据. 再来回顾一下sql语句中的select语句的语法: select 语句的基本语法: select from w ...
- 修改Mysql表中自增字段的初始值
修改Mysql表中自增字段的初始值: ALTER TABLE employee AUTO_INCREMENT=2; 解释:将表employee自增字段的初始值设置为2
- Sqlserver别太信任SysComments表中的text字段
1.用SysComments的原因 最近新模块的开发,需要更改和新增的存储过程比较多,为了同步开发环境和测试环境的存储过程,能在更新程序后,马上能整理出更改的存储过程脚本,并更新到测试DB服务器上,我 ...
- 查询一个表中所有id字段在另一个表中对应值的SQL语句怎么写?
编辑器加载中... 查询一个表中所有id字段在另一个表中对应值的SQL语句怎么写?多表联结查询:select rbd.RBDID, rbd.ProductCode,p.ProductCnName,p. ...
- WSS 数据库表中的 UserInfo 表中的 tp_SystemId 字段的使用
在 WSS 的数据库中,UserInfo表的 tp_SystemId 记录的是用户登录验证时需要用到的数据,是此用户在 AD( Active Directory ) 中的 SID( Security ...
- mysql怎么修改表中的文字_mysql表中怎么修改字段?
在mysql表中,可以使用"ALTER TABLE 表名 CHANGE 旧字段名 新字段名 数据类型;"语句来修改字段名称:使用"ALTER TABLE 表名 MODIF ...
- sql一个表中两个字段合并求和
sql一个表中两个字段,合并求和 SELECT SUM(字段a+'.'+字段b) as total from TABLE 转载于:https://www.cnblogs.com/lovewyc131 ...
最新文章
- http发送16进制报文_阿里云物联网平台使用心得(25)MQTT协议详解UNSUBSCRIBE报文...
- linux关闭沙盒模式,打开或关闭沙盒模式以禁用宏
- form data和request payload的区别
- SQLServer查询所有表所有字段包含xx的信息
- esp8266 at接收数据中断时间_利用ESP8266获取网络同步时间(北京时间)
- LINUX SHELL脚本如何判断一个目录下有没有文件
- Java小项目 屏幕自定义尺寸GIF生成器V1.0
- 如何转换html转化mp4,格式互转技巧:webm格式怎么转换mp4?
- 照相机成像原理 数码相机的成像原理
- 排队论模型(八):Matlab 生成随机数、排队模型的计算机模拟
- Excel 随机生成 算术题
- HTML表格合并行和列
- 【Spark NLP】第 6 章:信息检索
- Mac锁屏 设置快捷键
- 微星MS16j9鼠标面板可以移动指针,无法通过面板点击
- 《深入理解Android内核设计思想(第2版)(上下册)》之Android源码下载及编译
- gred-cam 的tensorflow实现 热力图
- html页面标尺,canvas实现标尺.html
- JavaScript -- event handler
- 跑酷游戏-第13届蓝桥杯Scratch国赛真题第3题