国科大数据库新技术第三次作业

把Mysql实现和华为openGauss实现都尝试了一遍,如下所示:

题目要求

 设计一个学籍管理小系统。系统包含以下信息:学号、学生姓名、性别、出生日、学生所在系名、学生所在系号、课程名、课程号、课程类型(必修、选修、任选)、学分、任课教师姓名、教师编号、教师职称、教师所属系名、系号、学生所选课程号、学生所选上课教师姓名、选课成绩。作业所需资料和数据已经放在课程网站上。

要求1:

用E-R图表示概念模型设计出合理的关系模式:给出表名、列名、数据类型指出每个关系的键和外键(如果有的话)

要求2:

完成在表上的操作 (用SQL的SELECT语句): 1.给出学生名,查询学生所选的所有课程名、成绩,累计学分。 2.给出课程名,查询学生的平均成绩 3.各门课按平均成绩排序 4.显示所有的课程名和讲课教师名

要求3

内容中的ER图在软件上实现,关系模式用具体数据库软件实现,并拷屏。要求2内容在具体数据库软件上实现,并将实验结果拷贝到作业当中。实验数据在课程网站的excel表格中。

1.Mysql实现

要求1

用E-R图表示概念模型

作业3 ER图

设计出合理的关系模式

  • student:学号,学生姓名, 性别, 出生日, 所在系号
  • teacher:教师编号, 教师姓名, 职称, 所在系名
  • course:课程号,课程名, 学分, 课程类型
  • department:系号, 系名
  • teach:教师编号, 课程号
  • selectcourse:课程号, 学号, 教师编号, 选课成绩

主键与外键

  • student的主键为学号;外键为学号、所在系号
  • course的主键为课程号;外键为课程号
  • teacher的主键为教师编号;外键为教师编号、所在院系号
  • department的主键为系号
  • selectcourse的主键为课程号, 学号;外键为教师编、学号、课程号
  • teach的主键为课程号、教师编号;外键为课程号、教师编号

数据库的具体实现(包括数据类型)

  • course
    image-20211030222943343
  • department
    image-20211030223034755
  • selectcourse
    image-20211030223335567
  • student
    image-20211030223435825
  • teach
    image-20211030223508614
  • teacher
    image-20211030223525341

要求2:

1.给出学生名,查询学生所选的所有课程名、成绩,累计学分

代码:

SELECT * 
FROM 
(
SELECT course.`课程名` ,selectcourse.`选课成绩`,student.`学生姓名` ,course.`学分`
	FROM course,student, selectcourse
	WHERE
		student.`学生姓名` = '张三' AND
		course.`课程号` = selectcourse.`课程号` AND
		selectcourse.`学号` = student.`学号`
) AS tmp1,
(
	SELECT SUM(course.`学分`) AS '该生累计学分'  
		FROM course,student, selectcourse
		WHERE
			student.`学生姓名` = '张三' AND
			course.`课程号` = selectcourse.`课程号` AND
			selectcourse.`学号` = student.`学号`
) AS tmp2

运行结果:

image-20211030223842954

2.给出课程名,查询学生的平均成绩

代码:

SELECT course.`课程号`,course.`课程名`,AVG(selectcourse.`选课成绩`) AS 平均成绩
FROM course,selectcourse
WHERE
	course.`课程名` = '模式识别'  AND
	course.`课程号` = selectcourse.`课程号`;

运行结果:

image-20211030224058193

3.各门课按平均成绩排序

代码:

SELECT course.`课程名`,selectcourse.`课程号`,AVG(selectcourse.`选课成绩`) AS 平均成绩
FROM selectcourse,course
WHERE course.`课程号` = selectcourse.`课程号`
GROUP BY selectcourse.`课程号` 
ORDER BY 平均成绩 

运行结果:

image-20211030225010893 image-20211030225115117

4.显示所有的课程名和讲课教师名

代码:

SELECT course.`课程名` ,teacher.`教师姓名`
FROM course,teach,teacher
WHERE
	course.`课程号` = teach.`课程号` AND
	teach.`教师编号` = teacher.`教师编号`
ORDER BY teacher.`教师姓名`

运行结果:

image-20211030225452495 image-20211030225538100

2.openGauss实现

要求1

用E-R图表示概念模型

作业3 ER图

设计出合理的关系模式

  • student:学号,学生姓名, 性别, 出生日, 所在系号
  • teacher:教师编号, 教师姓名, 职称, 所在系名
  • course:课程号,课程名, 学分, 课程类型
  • department:系号, 系名
  • teach:教师编号, 课程号
  • selectcourse:课程号, 学号, 教师编号, 选课成绩

主键与外键

  • student的主键为学号;外键为学号、所在系号
  • course的主键为课程号;外键为课程号
  • teacher的主键为教师编号;外键为教师编号、所在院系号
  • department的主键为系号
  • selectcourse的主键为课程号, 学号;外键为教师编、学号、课程号
  • teach的主键为课程号、教师编号;外键为课程号、教师编号

数据库的具体实现(包括数据类型)

  • course
    courseid即课程号

    image-20211109213528557

  • department
    departmentid即系号

    image-20211109213407083

  • student
    studentid即学号
    image-20211109213723297

  • selectcourse
    image-20211109213653224

  • teacher

    teacherId即教师编号image-20211109213806462

  • teach

    image-20211109213746717

要求2

1.给出学生名,查询学生所选的所有courseId、成绩,累计学分

TotalCredits即累计学分

SELECT * 
FROM 
(
SELECT course.courseName ,selectcourse.grade,student.studentName ,course.credit
	FROM course,student, selectcourse
	WHERE
		student.studentName = '张三' AND
		course.courseId = selectcourse.courseId AND
		selectcourse.studentId = student.studentId
) AS tmp1,
(
	SELECT SUM(course.credit) AS TotalCredits  
		FROM course,student, selectcourse
		WHERE
			student.studentName = '张三' AND
			course.courseId = selectcourse.courseId AND
			selectcourse.studentId = student.studentId
) AS tmp2;

image-20211109214034445

2.给出课程名,查询学生的avgScore

代码:

SELECT course.courseName,AVG(grade) AS avgScore
FROM course,selectcourse
WHERE
	course.courseName = '模式识别' AND
	course.courseId = selectcourse.courseId
GROUP BY course.courseId;

查询结果

image-20211109223804401

3.各门课按平均成绩排序

代码

SELECT course.courseName,course.courseId,AVG(selectcourse.grade) AS avgScore
FROM selectcourse,course
WHERE course.courseId = selectcourse.courseId
GROUP BY course.courseId 
ORDER BY avgScore;

查询结果

image-20211109224045252

4.显示所有的课程名和讲课教师名

代码

SELECT course.courseName ,teacher.teacherName
FROM course,teach,teacher
WHERE
	course.courseId = teach.courseId AND
	teach.teacherId = teacher.teacherId
ORDER BY teacher.teacherName

查询结果

image-20211109214757028
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值