SQL查询面试题解析:管理岗位业务培训

需积分: 9 6 下载量 27 浏览量 更新于2024-10-14 收藏 124KB DOC 举报
"DBA_SQL查询面试题.doc包含一系列与SQL查询相关的面试问题,主要针对数据库管理员(DBA)的角色。这些问题涉及到使用标准SQL语句来处理各种查询场景,包括嵌套查询、表关联以及特定条件的筛选。文档中提到了4个具体的查询问题,涵盖了学员信息、课程选择和排除特定课程的情况。" 问题1: 查询选修课程名称为“税收基础”的学员学号和姓名 此问题要求找出所有选修了“税收基础”课程的学员的学号和姓名。通过使用嵌套查询,首先从C和SC表中找出课程编号为“税收基础”的学号,然后将这些学号用于主查询,从S表中获取相应的学员姓名和所属单位。 正确查询语句: ```sql SELECT SN, SD FROM S WHERE [S#] IN ( SELECT [S#] FROM C, SC WHERE C.[C#] = SC.[C#] AND C.CN = '税收基础' ) ``` 问题2: 查询选修课程编号为'C2'的学员姓名和所属单位 这个问题要求找出选修了课程编号为"C2"的学员的姓名和所属单位。通过直接关联S和SC表,可以达到目的。 正确查询语句: ```sql SELECT S.SN, S.SD FROM S, SC WHERE S.[S#] = SC.[S#] AND SC.[C#] = 'C2' ``` 问题3: 查询未选修课程编号为'C5'的学员姓名和所属单位 这个查询的目标是找出没有选修课程"C5"的所有学员的姓名和所属单位。使用NOT IN操作符,配合嵌套查询找出选修了课程"C5"的学号,然后在主查询中排除这些学号。 正确查询语句: ```sql SELECT SN, SD FROM S WHERE [S#] NOT IN ( SELECT [S#] FROM SC WHERE [C#] = 'C5' ) ``` 问题4: 查询选修全部课程的学员姓名和所属单位 此问题较为复杂,需要找出选修了所有课程的学员。正确的查询方法是使用RIGHT JOIN和GROUP BY,通过比较每个学生选课的数量(去重)与总课程数量是否相等来确定。 正确查询语句: ```sql SELECT SN, SD FROM S WHERE [S#] IN ( SELECT SC.S# FROM SC RIGHT JOIN C ON SC.C# = C.C# GROUP BY SC.S# HAVING COUNT(DISTINCT SC.C#) = (SELECT COUNT(*) FROM C) ) ``` 这个查询中,RIGHT JOIN用于获取所有S表中的学号,即使他们在SC表中没有对应记录。GROUP BY按学生分组,HAVING子句则确保每个学生的选课数量等于所有课程数量,表示他们选修了所有课程。 这些问题的解答展示了SQL在数据库查询中的灵活性和多样性,对于DBA角色来说,理解和掌握这些查询技巧是至关重要的。