COMPSCI 351 S1 C-Assignment2——The University Database——讲解分析

2024-01-25 07:20

本文主要是介绍COMPSCI 351 S1 C-Assignment2——The University Database——讲解分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

        • 数据库的描述
            • 原文
            • 译文
        • 表格分析
        • 执行源码

数据库的描述
原文

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

译文

这个问题上是使用一个简化的大学课程管理数据库,这个数据库主要是由下面七个关系构成:

  • department:这个表记录了关于部门的信息。
  • student:这个表记录了有关于学生的所有信息。
  • instructor:这个表记录了导师的信息。
  • course:这个表记录课程信息。
  • section:这个表记录了每个学期和每一年提供的课程。
  • time_slot:这个表记录了上课时间具体信息。
  • classroom:这个表记录了上课教室的信息。
  • teaches:这个表记录了导师教学部份的信息。
  • takes:这张表记录了学生注册课程的信息。
  • advisor:这张表记录了导师和学生的推荐人关系。
  • prerep:这张表记录了课程的先决条件信息。

关于具体的表的结构和表的约束信息,请参见“university_data.sql”数据库文件。

在PhyMyAdmin中创建一个叫做“stu_upi_COMPSCI_351_C_S1_2021_A2”的数据库来解决下述的问题。运行已经给的SQL描述语句,并将数据插入数据库。请注意,upi是UPI的样例。请在数据库中和作业分配中使用自己的upi。

重要:在回答下述问题之前,你需要将给定的数据填入A2数据库中。请不要改变表中的任何数据,因为这些数据是用来验证你的回答是否生成正确的结果的标准。

在数据被灌入A2数据库中,我们可以运行SQL查询语句从其中检索有用的信息。例如:下述的查询语句就是检索所有学生的ID,名称和在“Comp.Sci”部门的学生的总学分。

在这里插入图片描述
查询结果被展示的在下面的表格中,通过点击SQL界面的“Print view”按钮实现对数据的展示。

在这里插入图片描述

  • 注意:
    • 上述的输出结果不仅仅展示了SQL的语句和最终的查询结果,同时也展示了包含你的UPI的正在工作的数据库名称。你应该使用layout去作为下述问题的回答。
    • 你需要使用PhyMyAdmin工具去完成这个任务。创建一个PDF文件,这个PDF文件包含了的上述所有问题的答案,提交这个PDF文件作为你对问题的回答。使用“Print View”执行后的截屏作为你的答案来回答问题。
表格分析
  • classroom:
    – classroom表存放上课教室的信息
    – 包括:教室所在教学楼、教室号、教室最大学生数量
    – 主码:教室所在教学楼、教室号

  • department:
    – department表存放某系的信息
    – 包括:系名、系所在教学楼、年预算
    – 主码:系名

  • course:
    – course表存放了有关课程的信息
    – 包括:课程ID、课程名、系名、学分
    – 主码:课程ID

  • instructor:
    – instructor表存放了有关教师的信息
    – 包括:教师ID、姓名、系名、年薪
    – 主码:教师ID

  • section:
    – section表存放了课程具体的授课情况
    – 包括:课程ID、课程段ID、学期、年、教学楼、教室号、课程节次
    – 主码:课程ID、课程段ID、学期、年

  • teaches:
    – teaches表存放了有关教师授课的信息
    – 包括:教师ID、课程ID、课程段ID、学期、年
    – 主码:教师ID、课程ID、课程段ID、学期、年

  • student:
    – student表存放了有关学生的信息
    – 包括:学生ID、学生姓名、系名、总绩点
    – 主码:学生ID

  • takes:
    – takes表存放了有关学生每门课程的信息
    – 包括:学生ID、课程ID、课程段ID、学期、年、分数
    – 主码:学生ID、课程ID、课程段ID、学期、年

  • advisor:
    – advisor表存放了有关学生导师的信息
    – 包括:学生ID、教师ID
    – 主码:学生ID

  • time_slot:
    time_slot表存放了课程上课时间的信息
    – 包括:课程节次、课程上课星期、开始时间(小时)、开始时间(分钟)、结束时间(小时)、结束时间(分钟)
    – 主码:课程节次、课程上课星期、开始时间(小时)、开始时间(分钟)

  • prereq:
    – prereq表存放每门课程的先修课程信息
    – 包括:当前课程ID、先修课程ID
    – 主码:当前课程ID、先修课程ID

执行源码
# 第一题,首先找出被老师教的和被老师推荐的
# 首先找出kat推荐的授课id
select ID,name,dept_name
from student
where ID in (select s_IDfrom advisor,instructorwhere instructor.ID = advisor.i_IDand instructor.name = "Katz"unionselect IDfrom takeswhere course_id in (select course_idfrom instructor,teacheswhere instructor.ID = teaches.IDand instructor.name = "Katz"));# 第二题,找出所有和提供section系楼不在同一个地方
select temp.c_id,temp.d_name,temp.sec_id,temp.semester,temp.`year`,temp.a_build
from (select section.course_id AS c_id,course.dept_name AS d_name,section.sec_id,section.semester,section.`year`,section.building AS a_buildfrom section,coursewhere section.course_id = course.course_id) temp,department
where temp.d_name = department.dept_name
AND temp.a_build != department.building;# 第三题,使用join操作去定义一个检索符合下列条件得查询:这门课在2020年可以上,输出应该使用系名去分组
# 要列出得信息:dept_name,course_id,title,sec_id,semester
# dept_name,course_id,title在course中存在
# sec_id,semester在section表中有select dept_name,course.course_id,title,sec_id,semester
from course inner join section
on section.course_id = course.course_id
where section.`year` = 2020
GROUP BY dept_name;# 第四题,检索至今为止没有教任何课得老师
# instructor:ID,name,dept_name,salary
# teaches:ID,course_id,sec_id,semester,year
select instructor.ID,name,dept_name,COUNT(*)
from instructor LEFT JOIN teaches
ON instructor.ID = teaches.ID
GROUP BY instructor.ID
having COUNT(*) = 0;# 第五题,检索同一年上了两门课及以上的学生
select student.ID,student.`name`
from student,takes
where student.ID = takes.ID
GROUP BY student.ID,`year`
HAVING COUNT(*) >= 2;# 第六题,使用join操作和合计函数去定义下列的sql语句。
# 对于每一个系来说,检索dept_name,导师编号,年预算,导师工资总和,最大最小工资,平均工资
# 可以使用format函数,将平均工资变成两位小数,这里没找到,不知道人家怎么实现的
# 我的navicate实现不了,识别不出来,认为是语法错误
select department.dept_name,COUNT(instructor.ID) AS No_of_Instructors,budget,SUM(salary) AS Total_sal,MAX(salary) AS Highest_Sal,MIN(salary) AS Lowest_Sal,AVG(salary) AS Average_Sal
FROM department LEFT JOIN instructor
ON department.dept_name = instructor.dept_name
GROUP BY department.dept_name;# 第七题:定义搜索所有课程对应注册学生学号的视图。
CREATE VIEW course_enrolment(year,semester,course_id,sec_id,No_of_students,Instructor)
AS
SELECT section.year,section.semester,section.course_id,section.sec_id,COUNT(takes.ID),instructor.NAME
FROM section,takes,teaches,instructor
WHERE section.course_id=takes.course_id	
AND section.course_id=teaches.course_id
AND teaches.ID=instructor.ID
GROUP BY section.`year`,section.semester,section.course_id,section.sec_id;# 第八题:检索所有学生的成绩总和,在2019年FALL第一个section上了CS-347的学生的成绩列表
SELECT student.ID,student.`name`,grade
from student,section,takes,course
WHERE student.ID = takes.IDAND takes.course_id=section.course_idAND course.course_id=takes.course_idAND course.course_id='CS-347'AND section.sec_id='1'AND section.semester='Fall'AND section.`year`=2019;# 第九题,找到Comp.Sci系薪水最高的两个导师,
# limit子句的作用:
SELECT ID,`name`,salary
FROM instructor
WHERE dept_name='Comp. Sci.'
ORDER BY salary DESC
LIMIT 2;# 第十题,检索课程CS-319的时间表信息,主要是在section -2 spring semester提供的
# 2020年上课的
SELECT section.course_id,section.sec_id,section.semester,section.`year`,time_slot.`day`,time_slot.start_hr,time_slot.start_min,time_slot.end_hr,time_slot.end_min,classroom.building,classroom.room_number,classroom.capacity
FROM time_slot,section,classroom
WHERE time_slot.time_slot_id=section.time_slot_idAND classroom.room_number=section.room_numberAND classroom.building=section.buildingAND section.course_id='CS-319'AND section.sec_id='2'AND section.semester='Spring'AND section.`year`=2020;# 第十一题,你写sql语句,生成Emma Levy的所有在2020年上的课程
SELECT section.course_id,section.sec_id,section.semester,section.`year`,time_slot.`day`,time_slot.start_hr,time_slot.start_min,time_slot.end_hr,time_slot.end_min,section.building,section.room_number
FROM section,time_slot,course
WHERE section.time_slot_id=time_slot.time_slot_idAND course.course_id=section.course_idAND course.course_id IN(SELECT takes.course_idFROM student,takesWHERE student.ID=takes.IDAND student.`name`='Emma Levy');

这篇关于COMPSCI 351 S1 C-Assignment2——The University Database——讲解分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/642491

相关文章

SQL中的外键约束

外键约束用于表示两张表中的指标连接关系。外键约束的作用主要有以下三点: 1.确保子表中的某个字段(外键)只能引用父表中的有效记录2.主表中的列被删除时,子表中的关联列也会被删除3.主表中的列更新时,子表中的关联元素也会被更新 子表中的元素指向主表 以下是一个外键约束的实例展示

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

如何去写一手好SQL

MySQL性能 最大数据量 抛开数据量和并发数,谈性能都是耍流氓。MySQL没有限制单表最大记录数,它取决于操作系统对文件大小的限制。 《阿里巴巴Java开发手册》提出单表行数超过500万行或者单表容量超过2GB,才推荐分库分表。性能由综合因素决定,抛开业务复杂度,影响程度依次是硬件配置、MySQL配置、数据表设计、索引优化。500万这个值仅供参考,并非铁律。 博主曾经操作过超过4亿行数据

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

MySQL高性能优化规范

前言:      笔者最近上班途中突然想丰富下自己的数据库优化技能。于是在查阅了多篇文章后,总结出了这篇! 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份

[MySQL表的增删改查-进阶]

🌈个人主页:努力学编程’ ⛅个人推荐: c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 💻💻💻数据库约束 🔭🔭🔭约束类型 not null: 指示某列不能存储 NULL 值unique: 保证某列的每行必须有唯一的值default: 规定没有给列赋值时的默认值.primary key:

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

MOLE 2.5 分析分子通道和孔隙

软件介绍 生物大分子通道和孔隙在生物学中发挥着重要作用,例如在分子识别和酶底物特异性方面。 我们介绍了一种名为 MOLE 2.5 的高级软件工具,该工具旨在分析分子通道和孔隙。 与其他可用软件工具的基准测试表明,MOLE 2.5 相比更快、更强大、功能更丰富。作为一项新功能,MOLE 2.5 可以估算已识别通道的物理化学性质。 软件下载 https://pan.quark.cn/s/57