本题目要求编写SQL语句,
检索出学生‘张三’选修的所有及格的课程及成绩,最后计算他所获得的总学分。输出成绩结果集按课程号升序排序。
注意:选课成绩在60分以上才能获得相应的学分。cou表中credit列为某课程的学分值 。假定学生姓名没有重名的情况。
提示:可使用WITH ROLLUP语句或UNION子句汇总结果。
表结构:
请在这里写定义表结构的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,
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`)
);
表样例
请在这里给出上述表结构对应的表样例。例如
stu
表:
cou
表:
sc
表:
输出样例:
请在这里给出输出样例。例如:
SELECT sc.cno 课程号, cou.cname 课程名,sc.grade 成绩,cou.credit 学分
FROM cou,sc,stu
WHERE stu.sname='张三'
and stu.sno=sc.sno
AND sc.grade >= 60
AND sc.cno=cou.cno
UNION
SELECT stu.sname,'所有及格课程','合计总学分',SUM(credit)
FROM cou,sc,stu
where stu.sname='张三'
and stu.sno=sc.sno
and sc.cno=cou.cno
and sc.grade>=60
order by 课程号