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

需积分: 0 13 下载量 3 浏览量 更新于2024-11-18 收藏 62KB DOC 举报
"这篇文档汇总了SQL面试中常见的问题,涉及到多条SQL语句的编写,包括查询特定条件的学生、删除重复数据、生成比赛组合以及复杂条件的比较查询。" 在SQL面试中,掌握基本的SQL操作是必不可少的。以下是对这些面试题涉及知识点的详细解释: 1. 查询每门课都大于80分的学生姓名: 这个问题通过子查询解决,首先找出分数小于等于80的学生,然后在主查询中排除这些学生。这涉及到`SELECT DISTINCT`、`NOT IN`和子查询的使用。 ```sql SELECT DISTINCT name FROM table WHERE name NOT IN (SELECT DISTINCT name FROM table WHERE fenshu <= 80) ``` 2. 删除冗余的学生信息: 这个题目要求删除具有相同学号、姓名、课程编号和课程名称但自动编号不同的记录。这需要使用`GROUP BY`和`MIN()`函数来找到每个唯一组的第一个记录,然后用`NOT IN`排除这些记录。 ```sql DELETE FROM tablename WHERE 自动编号 NOT IN (SELECT MIN(自动编号) FROM tablename GROUP BY 学号, 姓名, 课程编号, 课程名称, 分数) ``` 3. 生成比赛组合: 此题要求列出所有可能的比赛组合。通过将表自连接并添加`WHERE`条件使得一个队的名字总是小于另一个,可以实现这一目标。 ```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 JOIN (SELECT Occmonth, MAX(DebitOccur) AS Debit101Occur FROM TestDB WHERE AccID = '101' GROUP BY Occmonth) b ON a.Occmonth = b.Occmonth AND a.DebitOccur > b.Debit101Occur ``` 这些面试题展示了SQL的基础和进阶操作,包括子查询、聚合函数(如`MAX`)、分组(`GROUP BY`)、比较操作和连接(`JOIN`)。对于SQL面试者来说,理解和掌握这些技能是非常重要的,因为它们覆盖了数据查询、数据处理和数据分析的关键方面。