SQL面试精华:去冗余、比赛组合与科目对比
需积分: 9 129 浏览量
更新于2024-12-17
收藏 58KB DOC 举报
在SQL面试中,面试官常会提问一些关于基础操作、逻辑思维以及复杂查询的问题,以便了解应聘者的SQL语言掌握程度和问题解决能力。以下是一些常见的SQL面试题目及其解答:
1. **查询每门课成绩大于80分的学生姓名**:
题目要求找出没有低于80分课程的学生名字。通过使用`NOT IN`子句和`DISTINCT`关键字,可以避免重复列出所有学生的姓名。示例SQL语句如下:
```
SELECT DISTINCT name
FROM table
WHERE name NOT IN (SELECT DISTINCT name
FROM table
WHERE fenshu <= 80);
```
这个查询首先筛选出所有课程成绩小于或等于80分的学生,然后从剩余的学生中选取不同的姓名。
2. **删除冗余学生信息**:
如果有一张包含学生成绩的表,需要删除除自动编号外其他属性完全相同的重复记录,可以使用`GROUP BY`和`MIN`函数来找出每个唯一组的最小自动编号,然后删除不符合条件的记录:
```
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;
```
这个查询假设`team`表中的`name`字段代表部门名,并且保证了每个部门之间的比赛。
4. **比较TestDB数据表中的发生额**:
要找出TestDB表中所有科目在特定月份的发生额高于科目101的金额,可以使用子查询来获取101科目的最大发生额,然后进行比较:
```
SELECT a.*
FROM TestDB a
JOIN (SELECT Occmonth, MAX(DebitOccur) AS Debit101cur
FROM TestDB
WHERE AccID = '101'
GROUP BY Occmonth) b ON a.Occmonth = b.Occmonth AND a.DebitOccur > b.Debit101cur;
```
这个查询首先确定每个月101科目的最高发生额,然后与TestDB表中其他科目的发生额进行比较。
5. **处理多对多关系的表查询**:
题目最后提到“怎么把这样一个表”,但从给出的信息来看,并未提供具体的表结构,可能是缺失了部分问题。如果涉及一个多对多关系的表,比如关于比赛的表,可能需要进一步明确关联字段和查询需求。
这些SQL面试题涵盖了基础查询、数据去重、比较操作以及多表查询等常见场景,应聘者在准备此类面试时,不仅要熟悉语法,还要理解如何根据实际业务场景编写高效且可读性强的SQL语句。
2008-11-25 上传
2023-11-16 上传
2024-07-30 上传
2023-08-11 上传
点击了解资源详情
2013-03-10 上传
2023-09-03 上传
2011-03-11 上传
2011-04-19 上传
starzuo1981
- 粉丝: 1
- 资源: 4
最新资源
- RPMA回传+ Arduino Yun –第3部分-项目开发
- easy-redux:简化redux api
- BarreOutils:锻炼巴雷特迪尔斯
- copylight:jQuery 插件为内容许可证提供视觉强化
- 2021最新孜然导航系统 v1.0
- 微信小程序-小厨房
- visibl:通过React HOC进行视口内检测
- canvasinvaders:HTML Canvas 上的太空入侵者(有点)
- clickhousewriter.zip
- 西门子PLC工程实例源码第637期:转速PID控制程序(双脉冲).rar
- 洗剂
- 物理和云Cayenne交换机-项目开发
- fit-text-to-screen:
- CSYE6220:CSYE6220的分配
- ChatBot
- FJLRS:费·琼斯实验室请求系统