大学数据库考试复习试题带答案 下载本文

某个学校有若干个系,每个系有若干个学生,开设若干个课程,每门课程有若干学生选修,某一门课可以为不同的系开设。用E-R图画出该学校的概念模型。 描述学生的属性有:学号、姓名、出生日期、系号、班号; 描述系的属性有:系名、系号、系办公室地点、人数; 描述学校的属性有:学校名、成立年份、地点; 描述课程的属性有:课程号、课程名、学分。 (1) 设计学校的E-R图。

(2)将该E-R图转换为关系模式。

关系模型如下。

学生(学号、姓名、出生日期、系号、班号)。 系(系名、系号、系办公室地点、人数)。 学校(学校名、成立年份、地点) 课程(课程号、课程名、学分)

(3)指出转换结果中每个关系模式的候选码。

学生关系的主码:用户名 系的主码:系号

.. ..

学校主码:学校名 课程主码:学校名

有三个关系如下

(1)学生关系Student,包括学号Sno、姓名Sname、年龄Sage、性别Ssex; (2)课程关系Course,包括课程号Cno、课程名Cname、任课教师Cteacher; (3)学生选课关系SC,包括Sno、Cno和成绩Grade。

1.定义学生关系Student,学号不能为空,其值唯一,姓名值也唯一,学号为主码; CREATE TABLE Student

(Sno CHAR(10)NOT NULL UNIQUE PRIMARY KEY, Sname CHAR(30) UNIQUE, Sage INT , Ssex CHAR(2)) ;

2. 查询1号课程的平均成绩;

SELECT AVG(Grade)FROM SC WHERE Cno=‘1’; 3. 查询学号“95001”的学生选修全部课程号和成绩;

SELECT Cno,Grade FROM SC WHERE Sno=‘95001’; 4. 查询年龄在19-20岁之间的男生和女生的数量;

SELECT Ssex,COUNT(Sno) FROM Student

WHERE Sage≥19 and Sage≤20 GROUP BY Ssex;

或者:WHERE Sage BETWEEN 19 and 20

有三个关系如下:

(1)学生关系Student,包括学号Sno、姓名Sname、年龄Sage、性别Ssex; (2)课程关系Course,包括课程号Cno、课程名Cname、任课教师Cteacher; (3)学生选课关系SC,包括Sno、Cno和成绩Grade。

1.查询 “软件工程”课程的平均成绩; SELECT AVG(Grade) FROM Course,SC

WHERE Cname=‘软件工程’ AND SC.Cno=Course.Cno;

.. ..

或者:SELECT AVG(Grade)

FROM SC WHERE Cno IN (SELECT Cno FROM Course WHERE Cname=‘软件工程’) 2.查询名字中第2个字为\阳\字的学生的姓名和学号。 SELECT Sname,Sno FROM Student

WHERE Sname LIKE ‘_ _阳%’;

3.查询刘阳同学所选修的课程号和课程名

SELECT Course.Cno,Cname FROM Course WHERE Cno IN (SELECT Cno FROM SC WHERE Sno IN

(SELECT SnoFROM Student WHERE Sname= ‘刘阳’));

或者:SELECT Course.Cno,Sname FROM Student,Course,SC

WHERE Sname= ‘刘阳’ AND SC.Cno=Course.Cno AND Student.Sno=SC.Sno; 4查询学生数据库课的成绩,输出学生姓名和成绩,按成绩排序(降序) 。

SELECT Sname,Grade FROM Student,Course,SC WHERE Student.Sno=SC.Sno Course.Cno=SC.Cno AND Course.Cname=’数据库’ ORDER BY Grade DESC; 5.检索没有成绩的学生姓名和课程号。

Select Sname,Cno From Student,SC Where Grade is NULL AND Student.Sno=SC.Sno

有三个关系如下

(1)学生关系Student,包括学号Sno、姓名Sname、年龄Sage、性别Ssex; (2)课程关系Course,包括课程号Cno、课程名Cname、任课教师Cteacher; (3)学生选课关系SC,包括Sno、Cno和成绩Grade。 使用SQL语句实现:

1. 为学生表建立一个聚簇索引STUNO,按学号升序和年龄降序。

CREAT CLUSTER INDEX Stuon ON Student(SNO ASC,SAGE DESC); 2. 查询王寒同学没有选修的课程的课程号

SELECT Cno FROM Course

WHERE Cno NOT IN (SELECE Cno

FROM SC, Student

WHERE SC.Sno=Student.Sno AND Sname=”王寒”) ;

3. 创建一个成绩高于90分的学生视图S1 ,包括学生学号、出生年份、所选课程号、成绩。

CREAT VIEW S1(Sno,Sbirth,Cno,Grade ) AS SELECT Sno,2018-Sage,Cno, Grade

FROM Student,SC WHERE Student.Sno=Sc.Sno AND Grade>90 4. 向课程表中增加属性任课教师(Tname),类型是字符型

ALTER TABLE Course Add Tname char(20) 5.将课程号为‘003’ 课程成绩增加10分

UPDATE SC SET Grade= Grade+10 WHERE Cno=‘003’

.. ..

AND

有三个关系如下

(1)学生关系Student,包括学号Sno、姓名Sname、年龄Sage、性别Ssex; (2)课程关系Course,包括课程号Cno、课程名Cname、任课教师Cteacher; (3)学生选课关系SC,包括Sno、Cno和成绩Grade。 下面使用关系代数表达式实现:

1. 查询课程名为数据库原理,授课教师为刘洋的课程号。

Пcno(σcname=‘数据库原理’ ∧Cteacher=‘刘洋’(Course))

2. 查询既选修了课程1又选修了课程3的学生学号,姓名。

使用SQL语句实现:

3. 将数据库原理课程的成绩提高10分。 UPDATE SC SET GRADE=GRADE+10

where ‘数据库原理’=(select Cname from Course where Course.cno=SC.cno); 4. 查询至少2门课在80分以上的学生学号及课程数 SELECT Sno, COUNT(*) FROM SC

WHERE Grade>=80 GROUP BY Sno

HAVING COUNT(*)>=2; 5.查询“C语言_课程设计”的课程号 SELECT Cno FROM Course

WHERE Cname Like “C语言\\_程序设计”ESCAPE‘\\’;

ПSno,Sname (σcno=“1” (Student∞SC)) ∩ ПSno,Sname (σcno=“2” (Student∞SC))

有四个关系如下:

(1)S(sno,sname,city);

(2)P(pno,pname,color,weight); (3)J(jno,jname,city) ;

(4)SPJ(sno,pno,jno,qty) ;其含义见教材P64。 下面使用关系代数表达式实现: 1. 查询供应红色零件的供应商号。

ПSno (σcolor=“红” (S∞SPJ ∞P))

2.查询北京的供应商供应工程j1零件的供应商号及数量。

Пsno,qty (σcity=“北京” ∧jno=“j1” (S∞SPJ ∞P))

使用SQL语句实现:

3、建立上述的供应情况表SPJ。

.. ..