SQL查询与二战舰船数据库分析
需积分: 0 28 浏览量
更新于2024-08-05
收藏 543KB PDF 举报
本资源包含了两个数据库实例,一个是学生管理数据库,包含学生信息表S、课程表C和选课表SC;另一个是二战中的大型舰船数据库,包括Classes、Ships、Battles和Outcomes四个关系。在学生管理数据库中,SQL查询涉及到学生选课、教师信息以及成绩统计。在舰船数据库中,描述了舰船类、舰船、战役和参战结果等信息。
首先,我们详细分析学生管理数据库中的SQL查询问题:
1) 检索学号为003号同学所学课程的课程名和教师名:
这个查询需要通过选课表SC找到学号为003的同学选的课程,然后通过课程表C获取课程名和教师名。SQL语句可以写为:
```sql
SELECT C.CNAME, C.TEACHER
FROM SC
INNER JOIN C ON SC.C# = C.C#
WHERE SC.S# = '003';
```
2) 检索选择程军老师所授课程的男同学姓名:
这里需要找到选了程军老师课程且性别为男的学生,需要联接三个表。SQL语句如下:
```sql
SELECT S.SNAME
FROM S
INNER JOIN SC ON S.S# = SC.S#
INNER JOIN C ON SC.C# = C.C#
WHERE C.TEACHER = '程军' AND S.SEX = '男';
```
3) 检索刘丽同学不学的课程的课程名:
这个问题需要找出所有课程中,刘丽没有选的课程。SQL语句可以这样写:
```sql
SELECT C.CNAME
FROM C
WHERE C.C# NOT IN (
SELECT SC.C#
FROM SC
WHERE SC.S# = '刘丽'
);
```
4) 检索平均成绩在60分以下的学生的学号和姓名:
这个查询需要计算每个学生的平均成绩,然后筛选出平均成绩低于60分的学生。SQL语句如下:
```sql
SELECT S.S#, S.SNAME
FROM S
WHERE S.S# IN (
SELECT SC.S#
FROM SC
GROUP BY SC.S#
HAVING AVG(SC.GRADE) < 60
);
```
5) 检索至少选修3门课程的学生的学号,按照从小到大排列:
此查询需要找出选修课程数大于等于3的学生,并按学号排序。SQL语句如下:
```sql
SELECT S.S#
FROM S
INNER JOIN SC ON S.S# = SC.S#
GROUP BY S.S#
HAVING COUNT(SC.C#) >= 3
ORDER BY S.S#;
```
接下来,我们转向二战中的大型舰船数据库:
- Classes表记录舰船类别,包含主键class,以及type(型号)、country(生产国)、numGuns(火炮数量)、bore(火炮口径)和displacement(排水量)等字段。
- Ships表存储舰船信息,包含主键name,外键class(舰船类别)和launched(开始服役日期)。
- Battles表记载战役信息,包括name(战役名称)和date(战役日期)。
- Outcomes表记录参战结果,包括ship(舰船名称)、battle(战役名称)和result(战斗结果)。
例如,如果我们想找出所有德国制造的主力舰(type=bb),可以使用以下SQL语句:
```sql
SELECT S.name
FROM Ships S
INNER JOIN Classes C ON S.class = C.class
WHERE C.country = 'Germany' AND C.type = 'bb';
```
以上是对两个数据库实例的详细解析,涵盖了SQL查询技巧和数据库设计的基本概念。
2022-08-08 上传
2022-08-08 上传
2022-08-03 上传
2022-08-03 上传
2022-08-08 上传
2022-08-08 上传
又可乐
- 粉丝: 663
- 资源: 309