SQL语句练习(一) 查询学生获得的总学分

Posted jiangxiaoju

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL语句练习(一) 查询学生获得的总学分相关的知识,希望对你有一定的参考价值。

题目

本题目要求编写SQL语句, 检索出学生‘张三’选修的所有课程及成绩,最后计算他所获得的总学分。输出成绩结果集按课程号升序排序。 注意:选课成绩在60分以上才能获得相应的学分。cou表中credit列为某课程的学分值 。

数据表

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,
  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,
  PRIMARY KEY (`sno`,`cno`),
  CONSTRAINT `fk_sc_cno` FOREIGN KEY (`cno`) REFERENCES `cou` (`cno`),
  CONSTRAINT `fk_sc_sno` FOREIGN KEY (`sno`) REFERENCES `stu` (`sno`)
);

解题思路

分别查出张三的各科成绩,和总学分,再把两个查询结果用union all合并好。

SQL语句

因为union allorder by语句不能同时使用,所以先查询完成绩后排序,再选择出查询的结果。

select * from (
select cou.cno 课程号, cou.cname 课程,sc.grade 成绩 from stu
inner join sc on sc.sno=stu.sno
inner join cou on sc.cno=cou.cno
where stu.sname='张三'
order by 课程号
limit 1000
) a
union all
select stu.sname 课程号,
'总学分',
sum(credit)  成绩
from stu
inner join sc on sc.sno=stu.sno
inner join cou on sc.cno=cou.cno
where stu.sname='张三'  and sc.grade>=60
group by stu.sname;

以上是关于SQL语句练习(一) 查询学生获得的总学分的主要内容,如果未能解决你的问题,请参考以下文章

写sql查询语句----高手请进

sql select sql查询

select语句对对查询结果排序时,用( )子句指定排序字段,使用( )指定升序,使用( )降序。

sql查询语句?

查询平均成绩大于80分的课程的名字和学分.SQL语句查询,跪求高人指点!我积分不多,这次都悬赏出去了

Oracle的一道练习题:假定有一个XSCJ数据库,其中有一个学生基本数据表XSB和一张专业表ZYB