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

需积分: 0 14 下载量 63 浏览量 更新于2024-08-02 收藏 62KB DOC 举报
"SQL面试题及解答" 在SQL面试中,常常会遇到各种各样的问题来测试应聘者的技能和经验。以下是一些常见的SQL面试题及其解答: 1. 查询每门课都大于80分的学生姓名: ```sql SELECT DISTINCT name FROM table WHERE name NOT IN (SELECT DISTINCT name FROM table WHERE score <= 80) ``` 这道题目要求找出所有每门课程分数都超过80分的学生。通过`NOT IN`子句,我们可以排除掉至少有一门课分数低于或等于80分的学生。 2. 删除冗余的学生记录: ```sql DELETE FROM tablename WHERE 自动编号 NOT IN (SELECT MIN(自动编号) FROM tablename GROUP BY 学号, 姓名, 课程编号, 课程名称, 分数) ``` 这道题目是关于去除重复记录的。通过`GROUP BY`和`MIN`函数,我们找出每个唯一组合的最小`自动编号`,然后删除其他相同组合的记录。 3. 所有可能的比赛组合: ```sql SELECT a.name, b.name FROM teama, teamb WHERE a.name < b.name ``` 这道题目的目标是展示所有可能的比赛组合。通过自连接`teama`和`teamb`并使用`WHERE a.name < b.name`条件,可以确保每对组合只出现一次,并且避免了自我匹配。 4. 查询发生额高于101科目的科目: ```sql SELECT a.* FROM TestDB a JOIN ( SELECT Occmonth, MAX(DebitOccur) AS Debit101Occur FROM TestDB WHERE AccID = '101' GROUP BY Occmonth ) b ON a.Occmonth = b.Occmonth WHERE a.DebitOccur > b.Debit101Occur ``` 这道题目要求找出所有月份的发生额高于科目101的其他科目。首先,我们创建一个子查询来获取科目101每个月的最大发生额,然后通过`JOIN`操作与原始`TestDB`表进行连接,找出满足条件的记录。 这些面试题涵盖了SQL的基础知识,如选择、聚合、连接和子查询,以及处理重复数据和比较数据的技巧。在面试中,面试官可能会根据这些基础问题深入探讨更复杂的查询优化、性能调优或特定数据库系统的特性和功能。对于SQL熟练掌握的求职者来说,这些题目提供了一个展示自己能力的机会。