SQL查询解答:教务管理数据库操作示例

版权申诉
0 下载量 64 浏览量 更新于2024-08-05 收藏 23KB DOC 举报
"数据库第三章习题参考答案.doc" 在这些SQL查询中,涉及了数据库管理和关系型数据库的一些核心概念和操作。以下是对每个查询的详细解释: 1. **查询LIU教师所授课程的课程号和课程名**: 使用`SELECT C#, CNAME FROM C WHERE TEACHER = 'LIU'`,此查询从`C`表中选择`TEACHER`字段为'LIU'的记录,即找出教师LIU教授的所有课程的课程号(`C#`)和课程名(`CNAME`)。 2. **检索年龄大于23岁的男学生的学号和姓名**: 通过`SELECT S#, SNAME FROM S WHERE AGE > 23 AND SEX = 'M'`,筛选出`S`表中`AGE`大于23且`SEX`为'M'的记录,返回这些男生的学号和姓名。 3. **检索学号为202115146的学生所学课程的课程名和任课教师名**: 使用`SELECT CNAME, TEACHER FROM SC, C WHERE SC.C# = C.C# AND S# = '202115146'`,联接`SC`和`C`表,查找`S#`为'202115146'的记录,得到该学生选修的课程名和教师名。 4. **检索至少选修LIU教师所授课程中一门课程的女学生姓名**: 这里提供了三种方法: - **连接查询**:`SELECT SNAME FROM S, SC, C WHERE S.S# = SC.S# AND SC.C# = C.C# AND SEX = 'F' AND TEACHER = 'LIU'`,连接所有表,找到性别为F且选修了教师为LIU的课程的学生。 - **嵌套查询**:`SELECT SNAME FROM S WHERE SEX = 'F' AND S# IN (SELECT S# FROM SC WHERE C# IN (SELECT C# FROM C WHERE TEACHER = 'LIU'))`,先找出LIU教师的课程号,然后找出选修这些课程的学生。 - **存在量词**:`SELECT SNAME FROM S WHERE SEX = 'F' AND EXISTS (SELECT * FROM SC WHERE SC.S# = S.S# AND EXISTS (SELECT * FROM C WHERE C.C# = SC.C# AND TEACHER = 'LIU'))`,检查每个女性学生是否存在选修了LIU教师课程的记录。 5. **检索WANG同学不学的课程的课程号**: `SELECT C# FROM C WHERE NOT EXISTS (SELECT * FROM S, SC WHERE S.S# = SC.S# AND SC.C# = C.C# AND SNAME = 'WANG')`,通过NOT EXISTS子句找到没有WANG同学选修的课程号。 6. **检索至少选修两门课程的学生学号**: 使用`SELECT DISTINCT S.X.S# FROM SC AS S, SC AS X WHERE S.S# = X.S# AND S.C# != X.C#`,通过两个别名的`SC`表联接,找到学号相同但课程号不同的记录,表明这些学生至少选修了两门课程。 7. **检索全部学生都选修的课程的课程号与课程名**: 查询语句未给出完整,但可以推测是使用NOT EXISTS或EXCEPT操作找出所有学生都选修的课程。一个可能的实现是找到每门课程,然后排除没有被任何学生选修的课程。 8. **检索选修课程包含LIU教师所授课程的学生学号**: 类似于第4个问题,但目标是找出所有选修过LIU教师课程的学生,无论性别。这里也需要提供多种方法,类似于第4题的解决方案。 以上SQL查询展示了如何使用基本的SQL操作(如SELECT、FROM、WHERE、JOIN、IN、EXISTS、NOT EXISTS等)来处理复杂的数据库查询,包括联接表、过滤条件、子查询以及聚合函数等。这在实际数据库管理、数据分析和数据报表制作中是非常常见的技能。