SQL面试必备:经典题目解析

5星 · 超过95%的资源 需积分: 0 71 下载量 106 浏览量 更新于2024-11-16 1 收藏 62KB DOC 举报
"数据库面试笔试(SQL经典面试题及答案)-04" 这些题目和答案展示了在数据库面试或笔试中可能会遇到的一些SQL查询问题。以下是针对每个问题的详细解析: 1. 查询每门课都大于80分的学生姓名: 这个问题要求找出所有在所有课程中成绩都超过80分的学生。可以通过使用子查询来解决这个问题。首先,找出所有成绩小于等于80分的学生,然后在主查询中排除这些学生。答案如下: ```sql SELECT DISTINCT name FROM table WHERE name NOT IN (SELECT DISTINCT name FROM table WHERE score <= 80) ``` 2. 删除冗余的学生信息: 如果有多条记录具有相同的学号、姓名、课程编号、课程名称和分数,但只有一个不同的“自动编号”,那么需要删除这些重复的记录,保留每个组中最小的“自动编号”。答案如下: ```sql DELETE FROM table_name WHERE 自动编号 NOT IN (SELECT MIN(自动编号) FROM table_name GROUP BY 学号, 姓名, 课程编号, 课程名称, 分数) ``` 3. 所有可能的比赛组合: 这个问题要求找到所有可能的两两比赛组合。可以使用自连接来解决,确保每一行都是唯一的组合,并且每个队只与其他队比赛一次。答案如下: ```sql SELECT a.name, b.name FROM team a, team b WHERE a.name < b.name ``` 4. 查询发生额高于101科目的科目: 需要找出每个月份的科目发生额都高于科目101的相同月份的发生额。这可以通过使用子查询来比较每个月的最大发生额来实现。答案如下: ```sql SELECT a.* FROM TestDB a ,(SELECT Occmonth, MAX(DebitOccur) AS Debit101ccur FROM TestDB WHERE AccID = '101' GROUP BY Occmonth) b WHERE a.Occmonth = b.Occmonth AND a.DebitOccur > b.Debit101ccur ``` 对于面试题中的“yearm”信息,看起来可能是询问关于时间序列数据的处理,但没有提供完整的问题,所以无法给出具体的解答。 这些问题涵盖了SQL基础,如子查询、分组、聚合函数、连接操作等,是数据库面试中常见的考察点。掌握这些技能对于理解和处理复杂的数据库查询至关重要。在实际工作中,这样的能力可以帮助优化查询性能,提高数据处理效率。