《数据库原理与应用》(第三版)书后上机练习题——第六章 - Go语言中文社区

《数据库原理与应用》(第三版)书后上机练习题——第六章


《数据库原理与应用》(第三版)书后上机练习题——第六章


书上给的三个表的数据

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

题目错误的地方

  • 所有关于VB课的题目,这里可以选择把表中的Java课改成VB课,或者把题目中的VB课改为Java课
    • 我这里是把题目中的VB课改为Java课来写的
  • 18题: 查询选课人数最多的前两名学生的学号和选课门数,包括并列的情况。
    • 这里不通顺应该是: 选课门数最多的前两名学生

答案

题1.查询学生选课表中的全部数据。

SELECT * FROM SC

在这里插入图片描述

题2.查询计算机系的学生姓名、年龄。

SELECT Sname,Sage FROM Student WHERE Sdept='计算机系'

在这里插入图片描述

题3.查询成绩在70 ~ 80 分之间的学生学号、课程号和成绩。

SELECT Sno,Cno,Grade FROM SC WHERE Grade BETWEEN 70 AND 80

在这里插入图片描述

题4.查询计算机系年龄在18 ~ 20且性别为“男”的学生姓名、年龄。

SELECT Sname,Sage FROM Student 
	WHERE Sdept='计算机系' AND Sage BETWEEN 18 AND 20 AND Ssex='男'

在这里插入图片描述

题5.查询“c01” 课程最高分。

SELECT MAX(Grade) AS c01的最高分 FROM SC WHERE Cno = 'c01'

在这里插入图片描述

题6.查询计算机系学生的最大年龄和最小年龄。

SELECT MAX(Sage) AS 计算机系的最大年龄,MIN(Sage) AS 计算机系的最小年龄 FROM Student
	WHERE Sdept = '计算机系'

在这里插入图片描述

题7.统计每个系的学生人数。

SELECT Sdept,COUNT(*) AS 学生人数 FROM Student GROUP BY Sdept

在这里插入图片描述

题8.统计每个学生的选课门数和考试总成绩,并按选课门数升序显示结果(不包括没选课的学生)。

SELECT Sno,COUNT(*) AS 选课门数,SUM(Grade) AS 总成绩 FROM sc GROUP BY Sno
	ORDER BY COUNT(*) ASC

在这里插入图片描述

题9.查询总成绩超过200分的学生,列出学号、总成绩。

SELECT Sno,SUM(Grade) AS 总成绩 FROM SC
	GROUP BY Sno HAVING SUM(Grade)>200

在这里插入图片描述

题10.查询选了“c02”课程的学生姓名和所在系。

SELECT Sname,Sdept FROM Student S JOIN SC ON S.Sno = SC.Sno
	WHERE Cno = 'c02'

在这里插入图片描述

题11.查询成绩80分以上的学生姓名、课程号和成绩,并按成绩降序排列结果。

SELECT Sname,Cno,Grade FROM Student S JOIN SC ON S.sno = SC.sno
	WHERE Grade>80 ORDER BY Grade DESC

在这里插入图片描述

题12.查询哪些学生没有选课,要求列出学号、姓名和所在系。

SELECT S.Sno,Sname,Sdept FROM Student S LEFT JOIN SC ON S.Sno = SC.Sno
	WHERE SC.Cno is NULL

在这里插入图片描述

题13.统计每门课程的选课人数,列出课程号和选课人数(包括没人选的课程)。

SELECT C.Cno,COUNT(SC.Sno) AS 选课人数 FROM Course C LEFT JOIN SC
	ON C.Cno = SC.Cno GROUP BY C.Cno

在这里插入图片描述

题14.查询与"VB""Java"在同一学期开设的课程的课程名和开课学期。

/*题目应该是 查询与“Java"在同一学期开设的课程的课程名和开课学期。*/
SELECT Cname,Semester FROM Course
	WHERE Semester IN (
		SELECT Semester FROM Course WHERE Cname='Java')

在这里插入图片描述

题15.查询与李勇年龄相同的学生的姓名、所在系和年龄。

SELECT Sname,Sdept,Sage FROM Student
	WHERE Sage IN (
		SELECT Sage FROM Student WHERE Sname='李勇')

在这里插入图片描述

题16.查询计算机系年龄最小的两名学生的姓名和年龄。

SELECT TOP 2 WITH TIES Sname,Sage FROM Student
	WHERE Sdept='计算机系'
	ORDER BY Sage ASC

在这里插入图片描述

题17.查询"VB"“Java"成绩最高的前两名学生的姓名、所在系和"VB”"Java"成绩,包括并列的情况。

/*题目应该是 查询Java成绩最高的前两名学生的姓名,所在系和Java成绩,包括并列情况*/
SELECT TOP 2 WITH TIES Sname,Sdept,Grade
	FROM Student S JOIN	SC ON	S.Sno=SC.Sno
	JOIN Course C ON C.Cno=SC.Cno
	WHERE Cname = 'Java'
	ORDER BY Grade DESC

在这里插入图片描述

题18.查询选课人数门数最多的前两名学生的学号和选课门数,包括并列的情况。

/*题目应该是 查询选课门数组多的前两名学生的学号和选课门数,包括并列情况*/
SELECT TOP 2 WITH TIES Sno,COUNT(*) AS 选课门数
	FROM SC GROUP BY Sno ORDER BY COUNT(*) DESC

在这里插入图片描述

题19.查询学生人数最多的系,列出系名和人数。

SELECT TOP 1 Sdept,COUNT(*) AS 人数 FROM Student
	GROUP BY Sdept ORDER BY COUNT(*) DESC

在这里插入图片描述

题20.用子查询实现如下查询:

(1)查询选修了"c01"号课程的学生的姓名和所在系。

SELECT Sname,Sdept FROM Student
	WHERE Sno IN (SELECT Sno FROM SC WHERE Cno = 'c01')

在这里插入图片描述

(2)查询数学系成绩在80分以上的学生学号、姓名、课程号和成绩。

SELECT Student.Sno,Sname,Cno,Grade FROM Student JOIN SC ON Student.Sno=SC.Sno
	WHERE Student.Sno IN(SELECT Sno FROM Student WHERE Sdept = '数学系') 
	AND SC.Sno IN(SELECT Sno FROM SC WHERE Grade > 80)

在这里插入图片描述

(3)查询计算机系考试成绩最高的学生姓名。

SELECT Sname FROM Student JOIN SC ON Student.Sno=SC.Sno 
	WHERE Sdept = '计算机系' AND Grade = (SELECT MAX(Grade) FROM
		SC JOIN Student ON SC.Sno=Student.Sno WHERE Sdept = '计算机系') 

在这里插入图片描述

(4)查询数据结构考试成绩最高的学生姓名、所在系、性别和成绩。

SELECT Sname,Sdept,Ssex,Grade FROM Student
	JOIN SC ON Student.Sno=SC.Sno
	JOIN Course ON SC.Cno=Course.Cno
	WHERE Cname='数据结构' AND Grade=(SELECT MAX(Grade)
		FROM SC JOIN Course ON SC.Cno=Course.Cno WHERE Cname='数据结构')

在这里插入图片描述

题21.查询没选"VB""Java"课程的学生姓名和所在系。

/*题目应该是 查询没选“Java*课程的学生姓名和所在系*/
SELECT Sname,Sdept FROM Student 
	WHERE Sno IN(SELECT Sno FROM SC JOIN Course ON SC.Cno = Course.Cno
		WHERE Cname != 'Java')

在这里插入图片描述

题22.查询计算机系没有选课的学生的姓名和性别。

SELECT Sname,Ssex FROM Student
 LEFT JOIN SC ON Student.Sno=SC.Sno
 WHERE Sdept='计算机系' AND SC.Sno IS NULL

在这里插入图片描述

题23.查询计算机系考试平均成绩最低的学生的姓名以及所选的课程名。

SELECT Sname,Cname FROM Student
	JOIN SC ON Student.Sno=SC.Sno
	JOIN Course ON SC.Cno=Course.Cno
	WHERE  Student.Sno IN
	(SELECT TOP 1 WITH TIES Student.Sno 
		FROM Student JOIN SC ON Student.Sno=SC.Sno
		WHERE Sdept='计算机系'
		GROUP BY Student.Sno ORDER BY AVG(Grade) ASC)

在这里插入图片描述

题24.查询1 ~ 5学期中,选课人数最少的课程的课程名、开课学期和学分。

SELECT Cname,Semester,Credit FROM Course 
	WHERE Cno IN 
	(SELECT TOP 1 WITH TIES Cno FROM SC 
		WHERE Cno IN
		(SELECT Cno FROM Course
		 WHERE Semester
		 BETWEEN 1 AND 5)
		GROUP BY Cno ORDER BY COUNT(Sno) 
	)
	/*对1到5学期的课程号进行分组,根据学生数量排序(就是选课人数)*/

在这里插入图片描述

题25.查询计算机系每个学生的考试情况,列出姓名、课程名和考试成绩,并将查询结果保存到一个新表中。新表名为: Computer_Dept。

/*查询计算机系每个学生的考试情况,列出姓名、课程名和考试成绩,并将查询结果保存到一个新表中。新表名为: Computer_Dept*/
SELECT Sname,Cname,Grade INTO Computer_Dept
	FROM Student 
	LEFT JOIN SC ON Student.Sno=SC.Sno
	LEFT JOIN Course ON SC.Cno=Course.Cno
	WHERE Sdept='计算机系'

在这里插入图片描述
在这里插入图片描述

题26.创建一个新表,表名为test _t,其结构为(COLI, COL2, COL3),其中:

在这里插入图片描述

CREATE TABLE test_t(
	COL1 int,
	COL2 char(10) not NULL,
	COL3 char(10)
)
INSERT INTO test_t(COL2) VALUES('B1')
INSERT INTO test_t(COL1,COL2,COL3) VALUES(1,'B2','C2')
INSERT INTO test_t(COL1,COL2) VALUES(2,'B3')

在这里插入图片描述
在这里插入图片描述

题27.删除考试成绩低于50分的学生的选课记录。

DELETE FROM SC WHERE Grade < 50

没有低于50分的
在这里插入图片描述

题28.删除没有人选的课程。

DELETE FROM Course
	WHERE Cno NOT IN(SELECT Cno FROM SC)

删了两个课程 c03计算机网路,c08离散数学
在这里插入图片描述
在这里插入图片描述

题29.删除计算机系"VB"“Java"成绩不及格学生的"VB”"Java"选课记录。

DELETE FROM SC
	FROM SC JOIN Student ON Student.Sno=SC.Sno
	JOIN Course ON Course.Cno=SC.Cno
	WHERE Cname='Java' AND Grade < 60 AND Sdept='计算机系'

没有不及格的
在这里插入图片描述

题30.删除"VB"“Java"考试成绩最低的学生的"VB”"Java"选课记录。

DELETE FROM SC
	FROM SC JOIN Course ON Course.Cno=SC.Cno
	WHERE Cname='Java' AND Grade=(
		SELECT MIN(Grade) FROM SC
		JOIN Course ON Course.Cno=SC.Cno
		WHERE Cname='Java')

删除了9521103 c02 68 这条记录
在这里插入图片描述
在这里插入图片描述

题31.将第2学期开设的所有课程的学分增加2分。

UPDATE Course SET Credit=Credit+2 
	WHERE Semester=2

高等数学学分从8变为10
在这里插入图片描述
在这里插入图片描述

题32.将VBJava课程的学分改为3分。

UPDATE Course SET Credit=3
	WHERE Cname='Java'

在这里插入图片描述
在这里插入图片描述

题33.将计算机系学生的年龄增加1岁。

UPDATE Student SET Sage=Sage+1
	WHERE Sdept='计算机系'

在这里插入图片描述
在这里插入图片描述

题34.将信息系学生的“计算机文化学”课程的考试成绩加5分。

UPDATE SC SET Grade=Grade+5
	FROM SC JOIN Course ON Course.Cno=SC.Cno
	JOIN Student ON SC.Sno=Student.Sno
	WHERE Sdept = '信息系' AND Cname='计算机文化学'

9521102 c01 分数从82变为87
在这里插入图片描述
在这里插入图片描述

题35.将选课人数最少的课程的学分降低1分。

UPDATE Course SET Credit=Credit-1
	WHERE Cno IN (SELECT TOP 1 WITH TIES Course.cno
		FROM Course LEFT JOIN SC ON Course.cno=Sc.cno
		GROUP BY Course.cno
		ORDER BY COUNT(Sno))

图中的代码是错误的!看上面的代码
数据库基础、数据结构、操作系统的学分从4、5、4变为3、4、3
在这里插入图片描述
在这里插入图片描述
如有大佬发现错误,还请指正,感谢!

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_43594119/article/details/105416187
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢