数据库设计实战:E-R模型到关系模式转换与SQL查询
需积分: 20 116 浏览量
更新于2024-08-15
收藏 734KB PPT 举报
"数据库设计的相关习题解析"
本资料是关于数据库设计的习题课,旨在帮助学习者巩固《数据库原理与应用》课程中的知识。题目涵盖了E-R模型设计以及SQL查询的实践应用。通过解决这些习题,学习者可以深化对数据库概念的理解,提升实际操作技能。
首先,题目要求设计一个E-R模型,描述了一个工厂的生产环境,其中产品和零件之间存在多对多的关系。每个产品有产品号和产品名,每个零件有零件号和零件名。设计时,我们需要考虑如何体现产品与零件之间的关联,并确定关系模式的主键。在E-R模型中,可以创建一个"产品零件"实体来连接产品和零件,它的属性可能包括产品号和零件号。转换成关系模式后,主键可能是产品号和零件号的组合,表示为`ProductPart(Product#, Part#)`。
接下来是几个SQL查询的示例:
1. 查询"程军"老师所授课程的课程号(C#)和课程名(CName)。这可以通过简单的SELECT语句实现,如:`SELECT C#, CName FROM C WHERE Teacher = '程军'`。
2. 查询年龄大于21岁的男学生学号(S#)和姓名(SName)。对应的SQL语句为:`SELECT S#, SName FROM S WHERE Age > 21 AND Sex = '男'`。
3. 查询"李四"同学不学的课程号(C#)。这个查询需要用到NOT EXISTS子句,SQL实现如下:`SELECT C# FROM C WHERE NOT EXISTS (SELECT * FROM S, SC WHERE S.Sname = '李四' AND S.S# = SC.S# AND SC.S# = C.C#)`。
4. 查询所有学生都选修的课程的课程号(C#)和课程名(CName)。这个查询比较复杂,可能需要使用除法操作,或者先找出所有学生的学号,然后找出被所有学生选修的课程:`SELECT C#, CName FROM C WHERE C# IN (SELECT C# FROM C GROUP BY C# HAVING COUNT(DISTINCT SC.S#) = (SELECT COUNT(DISTINCT S.S#) FROM S))`。
5. 查询选修了包含"程军"老师所授课程之一的学生学号(S#)。这个查询可以通过JOIN操作实现:`SELECT DISTINCT S.S# FROM S JOIN SC ON S.S# = SC.S# JOIN C ON SC.C# = C.C# WHERE C.Teacher = '程军'`。
6. 查询个人平均成绩大于60分的学生信息。这个查询涉及到计算平均成绩,可能需要自定义函数或子查询:`SELECT S#, SName FROM S JOIN (SELECT S#, AVG(Grade) AS AvgGrade FROM SC GROUP BY S#) AS AvgGrades ON S.S# = AvgGrades.S# WHERE AvgGrades.AvgGrade > 60`。
7. 将选修了操作系统课程的考试成绩加5。这是一个更新操作,可以使用UPDATE语句完成:`UPDATE SC SET Grade = Grade + 5 WHERE C# IN (SELECT C# FROM C WHERE CName = '操作系统')`。
这些SQL查询展示了如何从基本的表选择、条件过滤到更复杂的联接、子查询和聚合函数的应用,对于理解和掌握数据库查询语言至关重要。通过解答这些习题,学习者可以提升自己的数据库查询能力,为实际工作中的数据库管理和分析打下坚实基础。
2022-07-13 上传
2023-01-08 上传
2011-12-23 上传
2021-05-22 上传
2023-01-08 上传
2023-08-02 上传
2022-06-08 上传
涟雪沧
- 粉丝: 21
- 资源: 2万+
最新资源
- 火炬连体网络在MNIST的2D嵌入实现示例
- Angular插件增强Application Insights JavaScript SDK功能
- 实时三维重建:InfiniTAM的ros驱动应用
- Spring与Mybatis整合的配置与实践
- Vozy前端技术测试深入体验与模板参考
- React应用实现语音转文字功能介绍
- PHPMailer-6.6.4: PHP邮件收发类库的详细介绍
- Felineboard:为猫主人设计的交互式仪表板
- PGRFileManager:功能强大的开源Ajax文件管理器
- Pytest-Html定制测试报告与源代码封装教程
- Angular开发与部署指南:从创建到测试
- BASIC-BINARY-IPC系统:进程间通信的非阻塞接口
- LTK3D: Common Lisp中的基础3D图形实现
- Timer-Counter-Lister:官方源代码及更新发布
- Galaxia REST API:面向地球问题的解决方案
- Node.js模块:随机动物实例教程与源码解析