SQL面试题精选:解决复杂查询问题

需积分: 31 13 下载量 176 浏览量 更新于2024-08-01 收藏 64KB DOC 举报
"Sql常见面试题" SQL是Structured Query Language的缩写,是用于管理和处理关系数据库的标准语言。以下是一些常见的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 学号, 姓名, 课程编号, 课程名称, 分数) ``` 此题要求去除学生表中的冗余记录,只保留每个(学号,姓名,课程编号,课程名称,分数)组合的最低自动编号记录。 3. 展示所有可能的比赛组合: ```sql SELECT a.name, b.name FROM team_a a, team_b b WHERE a.name < b.name ``` 这道题涉及到两个团队之间的所有可能比赛组合,通过自我联接并设定条件`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 AND a.DebitOccur > b.Debit101Occur ``` 该问题要求找出每个月份其发生额都高于科目101的其他科目。首先,从TestDB中找出科目101的每月最高发生额,然后通过JOIN操作与原表对比,筛选出发生额更高的记录。 以上面试题涉及到了SQL的基础操作,如选择(SELECT)、排除(NOT IN)、分组(GROUP BY)、联接(JOIN)、聚合函数(MAX),以及子查询的使用。掌握这些知识点对于理解SQL查询的基本逻辑至关重要,同时也是数据库管理员、数据分析师等IT职业面试中常见的考核内容。
2023-01-30 上传