SQL面试精华:去重、比赛组合与科目对比查询技巧

需积分: 9 22 下载量 85 浏览量 更新于2024-12-11 收藏 58KB DOC 举报
在IT面试中,SQL语言作为数据库查询的关键技能备受重视。以下是一些实用的SQL面试题及其解答,涵盖了基础查询、数据去重、多表操作以及复杂的数据比较。 1. 查询高分学生姓名 题目要求找出每门课成绩都大于80分的学生姓名。使用`NOT IN`子句可以避免重复列出不及格学生的姓名。两种常见的解决方案是: - 方法一: ``` SELECT DISTINCT name FROM table WHERE name NOT IN (SELECT DISTINCT name FROM table WHERE fenshu <= 80); ``` - 方法二: ``` SELECT name FROM student WHERE name NOT IN (SELECT name FROM student WHERE fenshu < 80); ``` 2. 删除冗余学生记录 当有多条记录具有相同的学号、姓名、课程编号和分数,但自动编号不同时,可以使用`MIN`函数结合`GROUP BY`来找出唯一组,并删除其他记录: ``` DELETE FROM tablename WHERE 自动编号 NOT IN (SELECT MIN(自动编号) FROM tablename GROUP BY 学号, 姓名, 课程编号, 课程名称, 分数); ``` 3. 部门比赛组合查询 要显示部门表(department)中四个不同部门之间的所有可能比赛组合,题目给出了一个简单的示例: ``` SELECT a.name, b.name FROM teama, teamb WHERE a.name < b.name; ``` 这里假设部门名就是比赛双方的标识。 4. 查询TestDB数据表中的科目余额比较 需要找出TestDB表中某个科目(例如101)在每个月份的最低发生额,然后找出所有其他科目在同月发生的额高于这个金额的记录: ``` SELECT a.* FROM TestDB a JOIN ( SELECT Occmonth, MAX(DebitOccur) AS Debit101curr FROM TestDB WHERE AccID = '101' GROUP BY Occmonth ) b ON a.Occmonth = b.Occmonth AND a.DebitOccur > b.Debit101curr; ``` 这个查询首先计算出科目101在每个月份的最大发生额,然后筛选出其他科目在相同月份且发生额高于该值的记录。 这些SQL面试题展示了SQL查询的基本结构,包括条件过滤、聚合函数、子查询以及多表连接等技巧,都是面试中常被考察的点。熟练掌握这些知识点,能够帮助求职者在实际工作中高效地处理数据库查询问题。