SQL查询实战:计算机系学生与课程关联

版权申诉
0 下载量 57 浏览量 更新于2024-08-06 收藏 17KB DOCX 举报
在数据库中,SQL(Structured Query Language)是一种用于管理和操作数据库的标准语言。针对提供的教学数据库Education,我们探讨了一系列SQL查询语句的问题及其解答。该数据库包含三个关系:学生关系S(包括学生编号SNO、姓名SNAME、年龄AGE、性别SEX和所属部门SDEPT)、学习关系SC(连接学生SNO和课程CNO,以及成绩GRADE)和课程关系C(课程编号CNO、课程名称CNAME、所属部门CDEPT和教师TNAME)。以下是对这些题目详细解析: 1. 检索计算机系的全体学生的学号、姓名和性别: 通过使用WHERE子句,我们可以筛选出SDEPT字段值为'CS'的记录,从而获取计算机系学生的个人信息。 ```sql SELECT Sno, Sname, Sex FROM S WHERE Sdept = 'CS'; ``` 2. 检索学习课程号为C2的学生学号与姓名: 此查询涉及两个表SC和C,需要通过CNO找到与'DS'课程匹配的记录,然后在SC表中找到对应的学生学号和姓名。 ```sql SELECT Sno, Sname FROM S WHERE Sno IN (SELECT Sno FROM SC WHERE Cno IN (SELECT Cno FROM C WHERE Cname = 'DS')); ``` 3. 检索选修课程名为“DS”的学生学号与姓名: 同理,通过多层嵌套的IN子句,查找符合指定课程名的学号和姓名。 4. 检索选修课程号为C2或C4的学生学号: 使用OR逻辑运算符来组合CNO条件,筛选出满足任一条件的学生学号。 ```sql SELECT Sno FROM SC WHERE Cno = 'C2' OR Cno = 'C4'; ``` 5. 检索至少选修课程号为C2和C4的学生学号: 这里需要用到子查询的联合(UNION),确保每个学生都选修了这两个课程。 ```sql SELECT Sno FROM (SELECT Sno FROM SC WHERE Cno = 'C2') AS X JOIN (SELECT Sno FROM SC WHERE Cno = 'C4') AS Y ON X.Sno = Y.Sno; ``` 6. 检索不学C2课的学生姓名和年龄: 通过NOT EXISTS来排除学习过C2课程的学生,再从S表中获取姓名和年龄。 ```sql SELECT Sname, Age FROM S WHERE NOT EXISTS (SELECT * FROM SC WHERE Cno = 'C2' AND Sno = S.Sno); ``` 7. 检索学习全部课程的学生姓名: 需要找到所有学生中,对所有课程都有记录的,即C表中不存在学生未选修的课程。这是一个更复杂的查询,可能需要使用自连接或者存在子查询来实现。 8. 查询所学课程包含学生S3所学课程的学生学号: 要找出与S3同学共同选修课程的学生,可以使用INNER JOIN和IN子句。 ```sql SELECT Sno FROM S WHERE EXISTS (SELECT * FROM SC WHERE S.Sno = SC.Sno AND SC.Cno IN (SELECT Cno FROM SC WHERE S3.Sno = SC.Sno)); ``` 这些SQL查询展示了如何使用基本的JOIN、WHERE、IN和NOT EXISTS等关键字来处理不同类型的数据库查询,以及如何在多个表之间建立关联,实现数据的筛选和整合。理解和掌握这些SQL技巧对于数据库管理及数据分析至关重要。