SQL Server面试经典题目:学员信息与课程关联查询

版权申诉
0 下载量 3 浏览量 更新于2024-08-19 收藏 15KB DOCX 举报
在SQL Server的经典面试题中,考察了数据库管理与查询的基本技能。面试者可能会被问到一系列涉及关系数据库操作的问题,包括使用嵌套查询来筛选特定信息。以下是四个典型问题及其解答: 1. **查询选修特定课程的学员信息** - 题目要求找出选修课程名称为“税收基础”的学员学号和姓名。 - SQL语句:`SELECT S.SNO, S.SDD FROM S WHERE S.SNO IN (SELECT SNO FROM C JOIN SC ON C.CNO = SC.CNO AND CNAME = '税收基础');` 这个查询首先通过JOIN操作将学生表S与课程关系表C和选课表SC连接,然后筛选出课程名为“税收基础”的学生记录。 2. **查询选修特定课程编号的学员信息** - 要找的是选修课程编号为'C2'的学员姓名和所属单位。 - SQL语句:`SELECT S.SNO, S.SDD FROM S, SC WHERE S.SNO = SC.SNO AND SC.CNO = 'C2';` 这个查询是通过内连接(INNER JOIN)直接查找课程编号为'C2'的对应学生信息。 3. **查询未选修特定课程的学员信息** - 需要列出不选修课程编号为'C5'的学生。 - SQL语句:`SELECT SNO, SDD FROM S WHERE SNO NOT IN (SELECT SNO FROM SC WHERE CNO = 'C5');` 这里使用NOT IN操作符排除了课程编号为'C5'的选课记录的学号。 4. **查询选修所有课程的学生** - 找到选修了所有课程的学生,即每个学生的课程数量等于课程表中的课程总数。 - SQL语句:`SELECT SNO, SDD FROM S WHERE SNO IN (SELECT SNO FROM SC GROUP BY SNO HAVING COUNT(DISTINCT CNO) = (SELECT COUNT(*) FROM C));` 使用子查询计算课程总数并与选课记录中的课程数量比较,确保每位学生都选修了所有课程。 5. **统计选修课程的学生人数** - 求出选课的学生总数。 - SQL语句:`SELECT COUNT(DISTINCT SNO) AS '学员人数' FROM SC;` 这个查询直接计数选课关系表SC中不同的学号,表示选课学生的数目。 6. **查询选修课程超过5门的学生信息** - 找到选修课程超过5门的学生学号和所属单位。 - SQL语句:`SELECT SN, SDFROM S WHERE SNO IN (SELECT SNO FROM SC GROUP BY SNO HAVING COUNT(DISTINCT CNO) > 5);` 这个子查询筛选出选修课程数量超过5门的学生。 最后一个问题涉及的是找出没有选修过“CC”老师讲授课程的学生。但提供的内容并未给出“CC”老师的课程号范围,因此这部分的完整查询可能需要额外的信息才能完成,比如“CTEACHER”字段或者额外的条件来匹配教师。完整的查询可能类似: ```sql SELECT SNAME FROM S WHERE SNO NOT IN (SELECT SNO FROM SC WHERE CTEACHER = 'CC' AND CNO IN (SELECT CNO FROM C)); ``` 以上每个问题都涉及到了SQL查询的不同技巧,如JOIN、子查询、聚合函数以及NOT IN操作等,这些都是面试中常被测试的基础知识点。