SQL面试精华:解决复杂查询及去重问题

需积分: 0 13 下载量 74 浏览量 更新于2024-12-22 收藏 62KB DOC 举报
在SQL面试中,面试官常常会考察应聘者的基础知识和实际应用能力。以下是一些常见的SQL面试问题及其解答,这些问题涵盖了基础查询、数据去重、多表操作以及复杂条件筛选等知识点。 1. **查询高分学生姓名** 问题要求找出所有课程分数大于80分的学生姓名。使用`NOT IN`子句可以从一个查询中排除低分学生的姓名,然后使用`DISTINCT`来确保结果中没有重复的姓名。答案是: ``` SELECT DISTINCT name FROM table WHERE name NOT IN (SELECT DISTINCT name FROM table WHERE fenshu <= 80); ``` 2. **删除冗余学生记录** 需要去除学号、姓名、课程编号和分数相同但自动编号不同的重复记录。可以使用`GROUP BY`和`MIN(自动编号)`来找出每个唯一组合的最小自动编号,然后删除其他记录。答案是: ``` DELETE FROM tablename WHERE 自动编号 NOT IN (SELECT MIN(自动编号) FROM tablename GROUP BY 学号, 姓名, 课程编号, 课程名称, 分数); ``` 3. **部门比赛组合查询** 考察多对多关系的组合查询。给定的SQL语句已经给出了基本思路,即按名字升序获取两个队伍的比赛组合。答案是: ``` SELECT a.name, b.name FROM teama, teamb WHERE a.name < b.name; ``` 4. **比较TestDB数据表中的科目发生额** 需要找出TestDB中某个科目(如'101')在每个月份的最高发生额,然后筛选出所有其他科目在该月份发生额高于'101'科目的记录。答案是: ``` SELECT a.* FROM TestDB a JOIN ( SELECT Occmonth, MAX(DebitOccur) Debit101curr FROM TestDB WHERE AccID = '101' GROUP BY Occmonth ) b ON a.Occmonth = b.Occmonth AND a.DebitOccur > b.Debit101curr; ``` 5. **处理复杂表结构问题** 题目未给出具体的表结构,但从上下文推测可能涉及时间序列数据。如果有一个包含年份、月份和发生额的表,可能需要根据年份和月份筛选符合条件的记录。由于缺乏具体表名和列名,这个问题的答案依赖于实际表结构,但一般会用到类似上面的`JOIN`和条件筛选。 这些SQL面试题不仅测试了查询语句的构建能力,还涉及到了数据清洗、聚合函数、连接操作以及数据比较等关键技能。准备这类面试时,熟悉这些基础和进阶SQL概念是至关重要的。
Twinwin
  • 粉丝: 0
  • 资源: 2
上传资源 快速赚钱