在《数据库技术与应用》课程中,嵌套查询是一个重要的SQL语言实践技能,它涉及到对数据库数据的复杂检索。在本课程的习题与作业中,我们可以通过几个具体任务来理解这一概念。
任务3-6-7:嵌套查询实践-2主要关注如何通过嵌套查询来处理多表数据查询。以下是一些示例问题及其解决方案:
1. 题目5:由于错误的参考答案,所有选修“体育与健康”课程的学生需要加分。这里展示了两种使用嵌套查询的方法:
- 参数法:首先声明一个变量`@a`,用它存储“体育与健康”课程的编号,然后更新分数。
```sql
declare @a int
select @a=c_number from t_course where c_name='体育与健康'
update t_scores set score=score+5 where c_number=@a
```
- 嵌套法:直接在`UPDATE`语句中嵌入子查询以获取课程编号,然后更新分数。
```sql
update t_scores set score=score+5
where c_number=(select c_number from t_course where c_name='体育与健康')
```
2. 题目6:将“2009级计算机班”更名为“2009级计算机应用班”。这可以通过简单的`UPDATE`语句完成。
```sql
update dbo.T_Class set Class_name='2009 级计算机应用班' where Class_name='2009 级计算机班'
```
3. 题目7:规范课程的课时,对于公共基础课和专业核心课,分别将课时调整为学时数的12倍和15倍。这里需要根据课程类型进行更新。
```sql
update t_course set hours=credit*12 where type='公共基础课'
update t_course set hours=credit*15 where type='专业核心课'
```
4. 题目8:找出计算机班级中平均成绩最高的学生并授予一等奖学金。这需要使用嵌套查询结合`GROUP BY`和`ORDER BY`来找到平均成绩最高的学生。
```sql
select top 1 s_number, avg(score) as '最高成绩'
from t_score
where s_number in (select s_number from t_student where Class_number in
(select Class_number from dbo.T_Class where Class_name like '%计算机%'))
group by s_number
order by avg(score) Desc
```
这个查询首先找出所有计算机班级的学生编号,然后计算每个学生的平均成绩,最后按照平均成绩降序排序,选取最高的一个。
这些练习题涵盖了嵌套查询在实际数据库操作中的应用,如在更新语句中嵌入子查询,以及在多表之间建立连接以完成特定的数据处理任务。通过这些实例,学生可以加深对SQL语言的理解,特别是如何有效地使用嵌套查询来处理复杂的数据库查询需求。