当前位置: 首页 > news >正文

一个简单的SQL面试题

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

SQL面试题

现在有两张表,结构如下:
学生表(student)

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

成绩表(score)

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

解答

  1. 考虑到成绩表中都是单科成绩,这里需要查询总成绩,那就先汇总计算总成绩;输出还要显示姓名,就在外层查询中关联查询姓名:
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;

还可以直接关联查询:

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
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大小进行去重。

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

http://www.lryc.cn/news/452435.html

相关文章:

  • 网站服务器在不同操作系统上监听端口情况的方法
  • RabbitMQ篇(基本介绍)
  • 浅谈网络通信中的透传和非透传
  • 影视cms泛目录用什么程序?苹果cms二次开发泛目录插件
  • IP6537_C_30W20V--移动设备快充的得力助手,集成 14 种快充协议的降压 SoC
  • 【hot100-java】【寻找两个正序数组的中位数】
  • C++七种异常处理
  • 【C语言系统编程】【第三部分:网络编程】3.3 实践与案例分析
  • Unity3D播放GIF图片 插件播放
  • 基于STM32的远程工业控制系统架构设计:MQTT通信、React界面与FreeRTOS优化的综合应用
  • 墙绘艺术在线交易平台:SpringBoot技术详解
  • VMware中Ubuntu系统Docker正常运行但网络不通(已解决)
  • 【web安全】——文件包含漏洞
  • 游戏如何对抗改包
  • 12.梯度下降法的具体解析——举足轻重的模型优化算法
  • GPT对话知识库——C、C++,还有Java,他们之间有什么区别
  • 华为GaussDB数据库之Yukon安装与使用
  • Linux命令:用于显示 Linux 发行版信息的命令行工具lsb_release详解
  • sbb-classes 元素
  • (作业)第三期书生·浦语大模型实战营(十一卷王场)--书生入门岛通关第3关Git 基础知识
  • 12.数据结构和算法-栈和队列的定义和特点
  • 15分钟学 Python 第34天 :小项目-个人博客网站
  • 从零开始实现RPC框架---------项目介绍及环境准备
  • 论文阅读:PET/CT Cross-modal medical image fusion of lung tumors based on DCIF-GAN
  • java基础 day1
  • cpp,git,unity学习
  • HTML增加文本复制模块(使用户快速复制内容到剪贴板)
  • Spring Cloud面试题收集
  • 观测云对接 SkyWalking 最佳实践
  • AI少女/HS2甜心选择2 仿天刀人物卡全合集打包