SQL练习题:查询与分析操作详解

需积分: 9 3 下载量 125 浏览量 更新于2024-07-31 收藏 249KB DOC 举报
本次提供的SQL试题主要涉及关系数据库操作和SQL语言的应用。题目围绕三个关系表S(学生)、SC(学生选课)和C(课程及教师)进行,旨在考察考生对关系代数和SQL查询的理解与实践能力。 第一部分:关系代数表达式 1. 查询学号为S3学生所学课程的课程名与任课教师名 - 关系代数表达式可能涉及选择($\sigma$)、投影($\pi$)操作,具体是先通过$\pi_{CNAME, TEACHER}(C)$获取课程名和教师名,然后通过$\sigma_{SNO='S3'}(SC \bowtie C)$将S3的学生选课记录与C表联接,筛选出对应的结果。 2. 查询至少选修LIU老师所教课程中一门课的女生姓名 - 使用$\pi_{SNAME}(S)$投影女生姓名,再通过连接操作和条件$\sigma_{TEACHER='LIU'}(C)$找到LIU老师的课程,进一步通过连接SC表找到这些课程的学生记录,最后筛选出满足条件的女生。 3. 查询WANG同学不学的课程的课程号 - 反向操作,先找出WANG同学学过的课程,即$\sigma_{SNO='WANG'}(SC)$,然后用全集$C$减去这些课程,即$C \setminus \sigma_{SNO='WANG'}(SC)$,投影出课程号。 4. 查询至少选修两门课程的学生学号 - 这个问题可能涉及到笛卡尔积操作($\times$),首先计算所有可能的课程组合,然后通过$\sigma_{COUNT(*)>=2}(GROUP BY Sno)$筛选出选修课程数量大于等于2的学生。 5. 查询选修课程中包含LIU老师所教全部课程的学生学号 - 通过联接和条件操作找到LIU老师的所有课程$C_L$,然后与学生选课表SC做全外连接,并在结果中筛选出只包含$C_L$的学生。 第二部分:SQL语言表示 1. 查询门门课程都及格的学生的学号 - 使用GROUP BY和HAVING子句,通过比较每个学生所有课程的最小成绩是否大于或等于60来判断。 2. 查询既有课程大于90分又有课程不及格的学生的学号 - 采用自连接的方式,首先筛选出成绩大于90的学生,再排除那些成绩低于60的学生。 3. 查询平均分不及格的课程号和平均成绩 - 分别计算所有课程的平均成绩并筛选出平均分低于60的课程;另外,查询平均成绩大于等于60的课程及其名称。 4. 找出至少选修了2号学生选修过的全部课程的学生号 - 通过NOT EXISTS和子查询实现,确保学生号不在其他任何学生(包括2号学生)已选课程中。 5. 求各门课程去掉一个最高分和最低分后的平均分 - 首先计算所有成绩的平均分,然后排除最高分和最低分进行重新计算。 这些题目综合考察了SQL查询的基本语法、关联操作、分组聚合以及条件筛选等核心概念,对于提高数据库管理和数据分析技能具有很好的训练作用。