mysql手写面试题_为了在面试官面前轻松完成手写SQL的面试题,平常多积累技巧...

本文适合SQL基础较弱的程序员,总结了如何在面试中轻松应对SQL手写题。通过实例讲解了纵向比较、横向比较、分组、统计和JOIN等知识点,强调了思路的重要性,并提供了多个查询示例,如比较不同课程成绩、统计学生信息、查询全及格学生等,帮助读者理解并掌握SQL核心技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

适用人群

SQL很熟练的就不用看了,我这里是偏基础的

平常SQL写的少总结也少的程序员,今天我们一起总结复习下

关键是思路,很多SQL写不出来是由于平常对思路不明确

把常见SQL函数语法套路搞熟习了,一般需求都不会有问题的

本文章是MYSQL

SQL相关历史文章

SQL基础篇 【这是我总结的SQL基础】

表学生表:Student(SID,Sname,Sage,Ssex)SID 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别

成绩表:score(SID,CID,score) --SID 学生编号,CID 课程编号,score 分数

成绩表

f88395766978e8bc06901018c25652f5.png

学生表

ade6e24f08dc92101691d8b77b1814b4.png

继续出几个题目大家一起学习下SQL玩法

纵向比较、横向比较、分组、统计、join

1、查询"01"课程比"02"课程成绩高的学生的信息及课程分数

c3b3b999202518ed35dcee6f3cf1f2bd.png

思路总结:这是准确查询需求 一般都用内连接 inner join

这里比较2个课程的分数,关联一张成绩表不好比较,2张成绩表就容易比较了,起因是关联两张成绩表会让列名添加,在一行数据中去比较成绩分数SQL也容易写了,横向比较思路

把两成绩表分别通过条件过滤掉,而后比较分数

2 查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩

d4e1f48087074e8d242c3319d59c71b3.png

思路总结:查所有学生的什么的信息,第一要想到学生表的左连接查询 left join

选课总数、所有课程总成绩,要想到统计函数count 、sum

统计函数知道后,还要知道group by 分组函数怎样配合统计函数去工作

有了上面的思路基本SQL已经问题不大。

细节注意group by后面肯定要跟能分组的列名才行,上面例子能分组的一定是学生ID,

一个学生ID会对应多个成绩数据,题目也是说要统计学生的什么什么数据情况。

3 查询所有课程都及格60学生情况

第一步 普通左连接

66a59e8030d72c136ec693ae3df7542c.png

第二部 加分组 统计函数等

5a1fd86dda0aa3656e8548a2ab4abd64.png

比较简单思路

不用HAVING函数一样是可以查解决就SQL难看点,需要嵌套子查询

35c13870b39ddc0176330428c1aab96b.png

思路分析:题目是查所有学生的什么,马上向到学生左连接 left join

所有课程都及格,需要统计,统计的维度是学生,因而group by 学生ID,分组学生ID时,请看分数和课程ID都可以统计函数去解决了

要所有课程都及格,这里所有课程就3门先写死了 HAVING count(b.CID)=3

4.查询各科成绩最高分、最低分和平均分

需要引入课程表 course

a72ea26a89aea434df4d6a11f1ceee50.png

结果

7c2659c0c71282dcae24c8fe92ed7d83.png

思想分析:最高、最低、平均,马上想到统计函数们max min avg

查询所有成绩,马上想到 成绩表左连接 left join

统计函数有了,当然要想到分组维度是课程ID

5 统计各科成绩各分数段人数:课程编号,课程名称, 100-85 , 85-70 , 70-60 , 0-60

896a0a017dfb383d8aaabacf12e1d054.png

思路分析统计什么,马上统计函数想到 sum

查询各科分数段的情况,需要找出范围后统计数量,这里就需要 case when then else end 帮助了,想不到它基本就没好处理思路了

利用case把相应范围内分数的数量过滤出来,配合SUM统计总数据

统计一定要分组group by 配合,很显著分组维度是课程

总结SQL结果不重要,总要的是写SQL过程中想到的思路

思路清晰,题目在怎样变化也离开不了SQL的基本知识

SQL函数有很多,平常大家多积累吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值