某个学校有若干个系,每个系有若干个学生,开设若干个课程,每门课程有若干学生选修,某一门课可以为不同的系开设。用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。
.. ..