SQL查询教育数据库:计算机系学生信息与课程选择

需积分: 18 2 下载量 180 浏览量 更新于2024-08-11 1 收藏 44KB DOC 举报
"该文档是关于数据库中SQL查询语句的练习题目及解答,涵盖了对关系型数据库中数据检索的基本操作。" 在SQL查询中,我们通常会涉及到多个数据库表的联接操作来获取所需信息。在这个教育数据库Education中,有三个主要的关系:学生关系S(包括学号SNO、姓名SNAME、年龄AGE、性别SEX和所属部门SDEPT)、学习关系SC(学号SNO、课程号CNO和成绩GRADE)以及课程关系C(课程号CNO、课程名称CNAME、所属部门CDEPT和教师姓名TNAME)。 以下是题目中给出的一些SQL查询语句及其解释: 1. 检索计算机系的全体学生的学号,姓名和性别: ```sql SELECT Sno, Sname, Sex FROM S WHERE Sdept = 'CS'; ``` 此查询从S表中选取Sdept字段值为'CS'的记录,即计算机系的学生信息。 2. 检索学习课程号为C2的学生学号与姓名: ```sql SELECT Sno, Sname FROM S WHERE Sno IN ( SELECT Sno FROM SC WHERE Cno = 'C2' ); ``` 这通过子查询首先在SC表中找到学习课程C2的学生学号,然后在S表中选取对应的学号和姓名。 3. 检索选修课程名为“DS”的学生学号与姓名: ```sql SELECT Sno, Sname FROM S WHERE Sno IN ( SELECT Sno FROM SC WHERE Cno IN ( SELECT Cno FROM C WHERE Cname = 'DS' ) ); ``` 这里需要先从C表找出课程名为"DS"的课程号,再根据这些课程号在SC表中找出对应的学生学号,最后在S表中获取学号和姓名。 4. 检索选修课程号为C2或C4的学生学号: ```sql SELECT Sno FROM SC WHERE Cno = 'C2' OR Cno = 'C4'; ``` 简单地通过OR条件筛选出学习C2或C4课程的学生学号。 5. 检索至少选修课程号为C2和C4的学生学号: ```sql SELECT Sno FROM SC X, SC Y WHERE X.Sno = Y.Sno AND X.Cno = 'C2' AND Y.Cno = 'C4'; ``` 这个查询要求找到同时选修了C2和C4课程的学生,通过两个SC表的自我连接实现。 6. 检索不学C2课的学生姓名和年龄: ```sql SELECT Sname, Age FROM S WHERE Sno NOT IN ( SELECT Sno FROM SC WHERE Cno = 'C2' ); ``` 选择S表中Sno不在SC表中学习C2课程的学生,从而得到不学C2课程的学生姓名和年龄。 7. 检索学习全部课程的学生姓名: ```sql SELECT Sname FROM S WHERE NOT EXISTS ( SELECT * FROM C WHERE NOT EXISTS ( SELECT * FROM SC WHERE S.Sno = SC.Sno AND C.Cno = SC.Cno ) ); ``` 这个查询很复杂,它查找在S表中的学生,对于C表中的每一门课程,这个学生都有对应的SC表记录,表示他们学了所有课程。 8. 查询所学课程包含学生S3所学课程的学生学号: 这个查询未提供完整,但可以理解为找出至少和学生S3学过相同一门课程的所有学生。具体实现需要知道S3学过的所有课程,然后将这些课程号用于子查询。 这些查询展示了SQL在处理多表关联查询时的灵活性和强大性,包括子查询、连接和逻辑运算符的运用。对于数据库管理和数据分析来说,熟练掌握SQL查询语句是非常重要的。