2022数据库系统原理期中试卷参考答案
试题如下:

东莞理工学院(本科)试卷(期中试卷参考答案)
2021 -2022 学年第二学期
数据库系统原理
一. 选择题(共30分 每题2分)答题要求:选择题答案填入下表中。
1-5BBDDA
6-10ADCCD
11-15BBCAD
二. 简答题(共10分 每题2分)
1. 假设存在一张职工表,包含“性别”属性,要求这个属性的值只能取“男”或“女”,这属于哪一种完整性?
答:用户自定义的完整性
2. 在LIKE运算符中“%”的作用是什么?
答:匹配0个或多个字符。
3. WHERE Age BETWEEN 20 AND 30子句,查找的Age范围是多少?
答:Age大于等于20并且小于等于30
4. WHERE Sdept NOT IN (‘CS’,’IS’,’MA’),查找的数据是什么?
答:查找‘CS’,’IS’,’MA’三个系之外的其他系
5. 外连接与内连接的主要区别是什么?
答:进行外连接的两个表中,可以有一张表不满足连接条件,而进行内连接的两个表必须都满足连接条件。
三. 导入数据库和创建表(共10分)
1. 导入ScoreDB数据库,并将其改名为ScoreDBTS,截图给出“SSMS”中的运行结果。
答题要求:操作结果贴截图,要求截图中显示ScoreDBTS数据库中的各表的表名。

2. 创建数据表SBook
答题要求:SQL语句贴语句文本,详细的操作结果贴截图。
CREATE TABLE SBook( --创建数据表SBook
schoolYear TINYINT NOT NULL CHECK(SchoolYear IN (1,2,3,4,5,6,7,8)),--学期
Number Smallint NULL, --数量
courseNo CHAR(3) NOT NULL CHECK((CourseNo LIKE '[0-9][0-9][0-9]') AND (courseNo NOT LIKE '000')),--课程代码
BookNo CHAR(8) NOT NULL CHECK(BookNo LIKE ' ISBN [0-9][0-9][0-9][0-9]'), --图书编号
CONSTRAINT SBookPK PRIMARY KEY(CourseNo,BookNo),
FOREIGN KEY(CourseNo) REFERENCES Course(CourseNo)
)

四. 操作题(共50分)
1. (10分)检索所有成绩小于60的学生所学课程的信息,包括学号、课程号,姓名和分数。
(1).写出关系代数(5分)
答题要求:关系代数手写拍照贴图。
ΠStudent.studentNo,courseNo,studentName,score(σscore<60(StudentScore))

(2).写出相应的SQL查询语句和结果截图(5分)
答题要求:SQL查询语句贴语句文本,查询结果贴截图。
SELECT a.studentNo,courseNo,studentName,score
FROM Student a,Score b
WHERE a.studentNo=b.studentNo AND score<60

2. (10分)查询“会计学院”,班号为“ CP1602”的所有学生的学号,姓名。请先写出关系代数(5分),再写出相应的SQL查询语句(5分)。
(1).写出关系代数(5分)
答题要求:关系代数手写拍照贴图。

(2).写出相应的SQL查询语句和结果截图(5分)
答题要求:SQL查询语句贴语句文本,查询结果贴截图。
SELECT studentNo,studentName
FROM Student a,Class b
WHERE b.institute='会计学院' AND b.classNo='CP1602' AND a.classNo=b.classNo

3. 查询成绩低于该门课程平均分的学生的学号、姓名和成绩,写出相应的SQL查询语句,写出相应的SQL查询语句和结果截图(10分)
答题要求:SQL查询语句贴语句文本,查询结果贴截图。
SELECT DISTINCT a.studentNo,c.studentName,a.score
FROM Score a,(SELECT courseNo,AVG(SCORE) AS avgScore FROM Score GROUP BYcourseNo) b,Student c
WHERE a.courseNo=b.courseNo AND a.score<b.avgScore AND a.studentNo=c.studentNo

4. 查询同时选修过“体育”和“操作系统”两门课程的同学学号、姓名以及该同学所选修的所有课程的课程名和相应成绩,按学号(升序)、成绩(降序)排序输出。写出相应的SQL语句(10分)。
SELECT a.studentNo, studentName, courseName, score
FROM Student a, Course b, Score c
WHERE a.studentNo=c.studentNo AND b.courseNo=c.courseNo
AND a.studentNo IN
( SELECT studentNo FROM Score
WHERE courseNo IN
( SELECT courseNo FROM Course
WHERE courseName='体育' ) )
AND a.studentNo IN
( SELECT studentNo FROM Score
WHERE courseNo IN
( SELECT courseNo FROM Course
WHERE courseName='操作系统' ) )
ORDER BY a.studentNo, score DESC
SELECT a.studentNo,a.studentName,courseName,score
FROM Student a,Score b,Course c,
(SELECT DISTINCT studentNo
FROM Score a,Course b
WHERE b.courseName='体育' AND a.courseNo=b.courseNo) d,
(SELECT DISTINCT studentNo
FROM Score a,Course b
WHERE b.courseName='操作系统' AND a.courseNo=b.courseNo) e
WHERE d.studentNo=e.studentNo AND b.studentNo=d.studentNo AND a.studentNo=b.studentNo AND b.courseNo=c.courseNo
ORDER BY a.studentNo ,score DESC

5. 创建一个视图VIstuScore,查询至少选修了两门课程并且平均成绩大于或等于80分的学生的学号、姓名、成绩和所在班级。写出相应的SQL查询语句和结果截图(10分)
答题要求:SQL查询语句贴语句文本,结果截图。
CREATE VIEW VIstuScore
AS
SELECT distinct A.studentNo,c.studentName,c.classNo,Score
FROM Score B, (select distinct studentno
from score
group by studentno
having COUNT(courseno)>=2 and AVG(score)>=80) A,student C
WHERE A.studentNo=B.studentNo AND A.studentNo=C.studentNo
GROUP BY A.studentNo,c.studentName,c.classNo,Score

例如:修改平均成绩大于或等于79分:
SELECT distinct A.studentNo,c.studentName,c.classNo,Score
FROM Score B, (select distinct studentno
from score
group by studentno
having COUNT(courseno)>=2 and AVG(score)>=79) A,student C
WHERE A.studentNo=B.studentNo AND A.studentNo=C.studentNo
GROUP BY A.studentNo,c.studentName,c.classNo,Score
