[南邮大数据库实验报告材料] 南邮数学实验报告

 课实验报告

 课 程 名: 数据库原理与应用

 任课教师: 程录庆

 专 业: 信息管理与信息系统

 学 号:

 姓 名: 解一涵

 二○一四 至二○一五年度 第二学期

  邮电大学 管理学院

 《数据库原理与应用》课程实验报告

 实验容及基本要求:

 实验项目名称:学生成绩管理数据库的建立

 实验类型:上机实验

 实验容及要求:

 1、构建一个教学管理关系数据库如下:

 学生(学号,,性别,年龄,籍贯,班级代号)

 课程(课程号,课程名称,学分数,教师代号)

 成绩(学号,课程号,成绩,考试时间)

 教师(教师代号,,性别,年龄,职称)

 为方便起见,上述关系用英文字母表示如下:

 S(SNO,NAME,SEX,AGE,JG,CLASSNO)

 C(CNO,CNAME,XF,TNO)

 G(SNO,CNO,GRADE,DATE)

 T(TNO,NAME,SEX,AGE,ZC)

 2、上述关系模式中,带下划线的属性为各自关系的关键字,其中学生表输入20条记录;课程表输入10条记录;成绩表输入100条记录;教师表入5条记录。基于这些关系表,做如下查询:

 找出男性学生的找出不是“2031”班的学生

 查询“峰”老师所教课程的课程名称和学分

 检索出选修了课程代号为“c11”和“c23”课程的学生

 查询至少选修了一门“峰”老师的课程的学生

 求选修了课程名为“数据库原理”的所有学生的学号和

 找出学生代号为“S101”和“S102”两个学生都选修了的课程

 检索出没有被任何学生选修的课程

 求出每个学生的成绩的平均分和总分

 求至少三门以上课程成绩在90分以上的学生学号

 求获得学分数在200以上的学生

 求出少于10个学生选修的课程

 求出有四门课程考试不及格的学生的求出每个老师所教课程的学分总数

 求出教了三门课以上的老师

 求出只教一门课程的老师

 求出每一个班级中每一门课程获得最高分的学生的学号

 实验结果:

 数据库表

 (1)学生表

 课程表

 成绩表

 教师表

 2、查询结果及SQL语言

 (1)找出男性学生的SELECT NAME

 FROM S

 WHERE XB="男";

 找出不是“2031”班的学生

 SELECT *

 FROM S

 WHERE SNO NOT IN

 (SELECT SNO

 FROM S

 WHERE CLASSNO='B131115');

 查询“峰”老师所教课程的课程名称和学分

 SELECT CNAME, XF

 FROM T, C

 WHERE NAME="峰" And T.TNO=C.TNO;

 检索出选修了课程代号为“c11”和“c23”课程的学生

 SELECT SNO

 FROM G

 WHERE CNO In ("1","2");

 查询至少选修了一门“峰”老师的课程的学生

 SELECT S.NAME, S.SNO

 FROM (S INNER JOIN G ON S.SNO=G.SNO) INNER JOIN C ON G.CNO=C.CNO

 WHERE G.CNO="6" Or G.CNO="7"

 GROUP BY S.NAME, S.SNO;

 求选修了课程名为“数据库原理”的所有学生的学号和

 SELECT S.SNO, S.NAME

 FROM S INNER JOIN G ON S.SNO=G.SNO

 WHERE (((G.CNO)="1"));

 找出学生代号为“S101”和“S102”两个学生都选修了的课程

 SELECT S.SNO, G.CNO, C.CNAME

 FROM (S INNER JOIN G ON S.SNO=G.SNO) INNER JOIN C ON G.CNO=C.CNO

 WHERE S.SNO LIKE' AND Exists (SELECT* FROM G AS G2 WHERE G.CNO=G2.CNO AND G2.SNO LIKE')<>False;

 检索出没有被任何学生选修的课程

 SELECT *

 FROM C

 WHERE C.CNO NOT IN (SELECT G.CNO FROM G);

 求出每个学生的成绩的平均分和总分

 SELECT S.SNO, Avg(G.GRADE) AS 平均分, Sum(G.GRADE) AS 总分

 FROM S INNER JOIN G ON S.SNO=G.SNO

 GROUP BY S.SNO;

 求至少三门以上课程成绩在90分以上的学生学号

 SELECT S.NAME, S.SNO, Count(G.GRADE) AS GRADE之计数

 FROM S INNER JOIN G ON S.SNO=G.SNO

 WHERE (((G.GRADE)>90))

 GROUP BY S.NAME, S.SNO

 HAVING (((COUNT(G.GRADE))>2));

 求获得学分数在200以上的学生

 SELECT S.SNO, S.NAME, Sum(G.GRADE) AS GREAT之总计

 FROM S INNER JOIN G ON S.SNO=G.SNO

 GROUP BY S.SNO, S.NAME

 HAVING Sum(G.GRADE)>200;

 求出少于10个学生选修的课程

 SELECT C.CNAME, C.CNO, Count(G.GRADE) AS GRADE之计数

 FROM (S INNER JOIN G ON S.SNO=G.SNO) INNER JOIN C ON G.CNO=C.CNO

 GROUP BY C.CNAME, C.CNO

 HAVING (((Count(G.GRADE))<10));

 求出有四门课程考试不及格的学生的SELECT S.NAME, Count(G.GRADE) AS GRADE之计数

 FROM S INNER JOIN G ON S.SNO=G.SNO

 WHERE (((G.GRADE)<60))

 GROUP BY S.NAME

 HAVING (((Count(G.GRADE))=4));

 求出每个老师所教课程的学分总数

 SELECT C.TNO, T.NAME, Sum(C.XF) AS XF之总计

 FROM C INNER JOIN T ON C.TNO=T.TNO

 GROUP BY C.TNO, T.NAME;

 求出教了三门课以上的老师

 SELECT T.NAME, T.TNO, Count(C.CNO) AS CNO之计数

 FROM T INNER JOIN C ON T.TNO = C.TNO

 GROUP BY T.NAME, T.TNO

 HAVING (((Count(C.CNO))>=3));

 求出只教一门课程的老师

 SELECT T.NAME, T.TNO, Count(C.CNO) AS CNO之计数

 FROM T INNER JOIN C ON T.TNO=C.TNO

 GROUP BY T.NAME, T.TNO

 HAVING (((Count(C.CNO))=1));

 

 求出每一个班级中每一门课程获得最高分的学生的学号

 SELECT S.CLASSNO, G.CNO, Max(G.GRADE) AS 最高分

 FROM S INNER JOIN G ON S.SNO=G.SNO

 GROUP BY S.CLASSNO, G.CNO;

 成绩评定:

 该生对待本次实验的态度 □认真 □良好 □一般 □比较差。

 本次实验的过程情况 □很好 □较好 □一般 □比较差

 对实验结果的分析 □很好 □良好 □一般 □比较差

 文档书写符合规程度 □很好 □良好 □一般 □比较差

 综合意见:

 成绩

 指导教师签名

 程录庆

 日期

 2014-4-24