新蛋科技数据库笔试题解析与解答

需积分: 10 115 下载量 182 浏览量 更新于2025-01-05 1 收藏 9KB TXT 举报
"这是一份关于新蛋科技公司数据库笔试题的资料,包含了多道数据库查询题目,旨在考察应试者对SQL语言的理解和运用能力。" 这些笔试题主要涉及了SQL(结构化查询语言)的基本操作,如联接查询、分组统计以及条件判断。以下是对每道题目的解析: 1. 题目要求查询每个学生的所有课程信息,包括学生姓名(sname),课程名称(cname),教师姓名(teacher)和成绩(scgrade)。解决这个问题的关键是使用内连接(INNER JOIN)将学生表(S)、课程表(C)和选课表(SC)联接在一起,基于学生ID(sid)和课程ID(cid)的匹配。正确查询语句如下: ```sql SELECT S.sname, C.cname, C.teacher, SC.scgrade FROM S, C, SC WHERE S.Sid = SC.sid AND C.cid = SC.cid ``` 2. 题目要求找出每个老师教的不及格(scgrade < 60)的学生人数。这里需要用到GROUP BY子句进行分组,并使用COUNT函数计算每个组的成员数。同时,我们需要再次使用内连接来匹配课程ID。正确的查询语句如下: ```sql SELECT C.teacher, C.cname, COUNT(SC.scgrade) AS NotPassCount FROM C, SC WHERE C.cid = SC.cid AND SC.scgrade < 60 GROUP BY C.teacher, C.cname ORDER BY C.teacher, cname ``` 3. 题目要求按照成绩范围将学生成绩分类为A、B、C、D四个等级。可以使用CASE语句来实现这个功能,根据scgrade的值设定不同的等级。查询语句如下: ```sql SELECT S.sname, C.cname, C.teacher, CASE WHEN SC.scgrade >= 90 THEN 'A' WHEN SC.scgrade >= 80 THEN 'B' WHEN SC.scgrade >= 60 THEN 'C' ELSE 'D' END AS grade FROM S, C, SC WHERE S.Sid = SC.sid AND C.cid = SC.cid ``` 4. 最后一道题目要求找出每个老师所教授的A等级(90及以上)和B等级(80-90)的学生人数。这需要两次使用子查询并联接来获取结果。首先,分别计算A等级和B等级的学生数量,然后将这两个子查询与教师表联接。查询语句如下: ```sql SELECT A.teacher, M1.gradeCount_A, M2.gradeCount_B FROM ( SELECT DISTINCT C.teacher FROM C ) AS A JOIN ( SELECT C.teacher, COUNT(SC.scgrade) AS gradeCount_A FROM S, C, SC WHERE S.Sid = SC.sid AND C.cid = SC.cid AND SC.scgrade >= 90 GROUP BY C.teacher ) AS M1 ON M1.teacher = A.teacher JOIN ( SELECT C.teacher, COUNT(SC.scgrade) AS gradeCount_B FROM S, C, SC WHERE S.Sid = SC.sid AND C.cid = SC.cid AND SC.scgrade BETWEEN 80 AND 89 GROUP BY C.teacher ) AS M2 ON M2.teacher = A.teacher ``` 这些题目覆盖了SQL中的基础查询和统计功能,对于理解如何在实际数据库环境中处理数据非常有帮助。通过解答这些问题,应试者可以展示他们在数据库管理和数据分析方面的技能。