sql面试题

这里写目录标题

1.只保留学生的最新成绩

表student中记录学生的成绩信息, 要求只保留学生的最新一条成绩记录

传统方式:

  1. 根据学生编号进行group by, 找到最新的一条记录(编号、时间)
  2. 根据编号和时间, 查询出记录的完整信息(id为2, 5, 6)
  3. 删除其余记录
sql 复制代码
delete from student where id not in (
	select id from student s1 inner join 
	(select `name`, max(time) as time from student group by `name`) s2
	on s1.name = s2.name and s1.time = s2.time
)

通过联表查询, 解决嵌套

  1. 通过与自身表进行关联, 让同一个人的记录互相进行对比,
  2. 设置条件s1.time > s2.time, 且使用left join, 保证时间早的记录被归档在右侧
  3. 即使只有一条记录, 也会被s1.id != s2.id过滤
  4. 时间最晚的那条记录, 永远不会出现在右侧. 右侧都是对比下来, 时间更早的数据, 我们将它们的id排重
  5. 删除这些id
sql 复制代码
delete from student where id in (
	select DISTINCT s2.id
	from student s1 left join student s2 
	on s1.`no` = s2.`no` and s1.id != s2.id
	where s1.time > s2.time
)
相关推荐
yzs8715 小时前
SQL Sever Pragmatic Bitmap过滤技术解析
数据库·sql
Full Stack Developme19 小时前
SQL发展历史
数据库·sql
zcn12619 小时前
关于非相关子查询改写经验
数据库·sql·sql优化改写
今天也是元气满满的一天呢20 小时前
详解SQL注入问题
网络·数据库·sql
omenkk720 小时前
【MySQL专题】1.一条更新SQL语句是如何执行的
数据库·sql·mysql
callJJ21 小时前
SQL 调优完全指南 —— 从入门到实战
数据库·sql·调优·慢查询
淘矿人1 天前
Claude助力前端开发
java·数据库·git·python·sql·spring·database
Languorous.1 天前
SQL新手高频语法错误:分号遗漏、字段名写错,避坑合集
数据库·sql
杨云龙UP1 天前
一次 Oracle 11g 异常不可用排查:从 ORA-01034 到磁盘 I/O 故障定位_2026-05-17
运维·数据库·windows·sql·oracle·centos
rockey6271 天前
AScript如何实现LINQ语法
sql·c#·.net·linq·script·eval·expression