一个简单的SQL面试题

最近面试遇到一个SQL题,复述如下:

SQL面试题

现在有两张表,结构如下:

学生表(student)

学号sid 姓名name
1 张三
2 李四
3 王五

成绩表(score)

序号id 学号sid 科目subject 分数score
1 1 语文 80
2 1 数学 90
3 2 语文 85
4 2 数学 100
5 3 语文 70
6 3 数学 60
  1. 写一个SQL,查出每个人的总分,并按倒序排列。输出字段如下:
姓名 总分
  1. 最近学校要举行乒乓球运动会,准备采用循环赛,即每个人都与其他人都要比赛。写一个SQL列出每一场比赛的参赛人员,按顺序输出。
A组 B组

解答

  1. 考虑到成绩表中都是单科成绩,这里需要查询总成绩,那就先汇总计算总成绩;输出还要显示姓名,就在外层查询中关联查询姓名:
SQL 复制代码
select s.name as '姓名', total as '总分' from student s left join (
   select sid, sum(score) as total from score group by sid
) t on s.id = t.sid order by total desc;

还可以直接关联查询:

SQL 复制代码
select name as '姓名', sum(`score`) as '总分' from student u, `score` s 
where u.id = s.sid group by s.sid order by sum(score) desc;

输出结果:

复制代码
+----+-----+
|name|total|
+----+-----+
|李四  |  185|
|张三  |  170|
|赵六  |  138|
|王五  |  130|
+----+-----+
  1. 既然要输出全部循环数据,那可以考虑使用join
SQL 复制代码
select a.name as 'A组', b.name as 'B组' from student a join student b on a.id!=b.id;

输出结果:

复制代码
+----+-----+
|A组|B组|
+----+-----+
|赵六  |张三  |
|王五  |张三  |
|李四  |张三  |
|赵六  |李四  |
|王五  |李四  |
|张三  |李四  |
|赵六  |王五  |
|李四  |王五  |
|张三  |王五  |
|王五  |赵六  |
|李四  |赵六  |
|张三  |赵六  |
+----+-----+

注意,上述输出中包含两条张三和李四的记录,即每个人作为A组比赛一次,作为B组再比赛一次。如果两个人只比赛一次,可以考虑利用id大小进行去重。

SQL 复制代码
select a.name as 'A组', b.name as 'B组' from student a join student b on a.id<b.id;

输出结果:

复制代码
+----+-----+
|A组|B组|
+----+-----+
|张三|李四|
|张三|王五|
|张三|赵六|
|李四|王五|
|李四|赵六|
|王五|赵六|
+----+-----+

平时使用join写SQL时一般使用的等值连接,即在on后面紧跟着表的主键等于另一个表的某一列,很少使用不等于或其他比较操作符判断。在语法上,可以使用等值连接以外的方式,这种类型的连接被称为非等值连接或范围连接。但在实际应用中,使用非等值连接可能会导致较大的中间结果集,特别是在数据量大的情况下,这可能会影响查询性能。故不推荐使用!!!

相关推荐
IvorySQL3 分钟前
最后 1 天!HOW 2026 早鸟票收官,赴济南解锁开源数据库未来
数据库·postgresql·开源
PacosonSWJTU13 分钟前
(转)mybatis拦截器
数据库·redis·mybatis
yitian_hm23 分钟前
HBase 原理深度剖析:从数据模型到存储机制
大数据·数据库·hbase
Anastasiozzzz24 分钟前
深入研究RAG: 向量数据库 原理&选型
数据库
G探险者38 分钟前
如何找到那些慢 SQL?
后端·sql
Yushan Bai1 小时前
RAC环境数据文件读取异常导致实例重启
数据库·oracle
小猿姐1 小时前
当KubeBlocks遇上国产数据库之Kingbase:让信创数据库“飞得更高”
运维·数据库·云原生
小李的便利店1 小时前
系统架构设计师-案例分析-数据库系统设计
数据库·系统架构
洛菡夕1 小时前
MySQL全量、增量备份与恢复
数据库·mysql
Sunia1 小时前
《Spring AI + 大模型全栈实战》学习手册系列 · 专题二:《Milvus 向量数据库:从零开始搭建 RAG 系统的核心组件》
数据库