SQL面试精华:去重、比赛组合与科目对比查询技巧
需积分: 9 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查询的基本结构,包括条件过滤、聚合函数、子查询以及多表连接等技巧,都是面试中常被考察的点。熟练掌握这些知识点,能够帮助求职者在实际工作中高效地处理数据库查询问题。
2584 浏览量
696 浏览量
8317 浏览量
931 浏览量
212 浏览量
173 浏览量
2023-02-20 上传
gaoqian813
- 粉丝: 3
- 资源: 4
最新资源
- saturn::globe_with_meridians:新的迷你快速浏览器
- 企业前台大厅模型设计
- 基于python+django+vue开发的工作数据获取与可视化
- NodeJS-Sample-Project:使用Express的节点Js上的样本项目,具有基本结构和数据库连接
- 战利品
- myBinomTest(s,n,p,Sided):具有任意二项式概率的 1 或 2 边二项式检验-matlab开发
- 银行存款余额调节表格excel模版下载
- 演唱会舞台3D模型
- autoprop:从访问器方法推断属性
- ABAssignment04
- 物品交接明细表excel模版下载
- desafio_conceitos_node
- vewa_app2:VEWA 网络应用程序
- 中式现代风会议室模型
- gritjz.github.io:史蒂芬·张的个人网站
- 工程质量验收记录表excel模版下载