图解面试题:经典50题

发布于: 雪球转发:0回复:0喜欢:2


已知有如下4张表:

学生表:student(学号,学生姓名,出生年月,性别)

成绩表:score(学号,课程号,成绩)

课程表:course(课程号,课程名称,教师号)

教师表:teacher(教师号,教师姓名)




1.汇总分析



-查询学生的总成绩并进行排名


/*

【知识点】分组查询

分析思路

select 查询结果 [总成绩:sum(成绩), 学号]

from 从哪张表中查找数据 [成绩表score]

where 查询条件 [没有]

group by 分组 [学生的总成绩:按照每个学生学号进行分组]

order by 排序 [按照总成绩进行排序:sum(成绩)];

/*

select 学号 ,sum(成绩) from score

group by 学号

order by sum(成绩) ;


 -查询平均成绩大于60分的学生的学号和平均成绩


/*

【知识点】分组+条件

分析思路

select 查询结果 [学号, 平均成绩: avg(成绩)]

from 从哪张表中查找数据 [成绩表score]

where 查询条件 [没有]

group by 分组 [学号]

having 分组条件 [平均成绩大于60分:avg(成绩 ) >60]

order by 排序 [没有];

/*

select 学号 ,avg(成绩) from score

group by 学号  

having avg(成绩 ) >60



2.复杂查询


-查询各学生的年龄(精确到月份)




/*

【知识点】时间格式转化

*/

select 学号 ,timestampdiff(month ,出生日期 ,now())/12 

from student ;


 -查询本月过生日的学生




select * 

from student

where month (出生日期 ) = month(now())+2;

.多表查询




-检索"0001"课程分数小于60,按分数降序排列的学生信息

思路如图:






select a.*,b.成绩 

from student as a

inner join score as b

on a.学号 =b.学号 

where b.成绩 <60 and b.课程号 =01

order by b.成绩 desc;

 

-查询不同老师所教不同课程平均分从高到低显示


【知识点】分组+条件+排序+多表连接,思路如图





select a.教师号,a.教师姓名,avg(c.成绩) 

from  teacher as a

inner join course as b

on a.教师号= b.教师号

inner join score  c on b.课程号= c.课程号

group by a.教师姓名

order by avg(c.成绩) desc;

 

-查询课程名称为"数学",且分数低于60的学生姓名和分数


【知识点】多表连接,思路如图


 



select a.姓名,b.成绩 

from student as a

inner join score as b

on a.学号 =b.学号 

inner join course c on b.课程号 =c.课程号 

where b.成绩  <60 and c.课程名称 ='数学';

 

-查询任何一门课程成绩在70分以上的姓名、课程名称和分数(与上题类似)




select a.姓名,c.课程名称 ,b.成绩 

from student as a

inner join score as b

on a.学号=b.学号

inner join course c on b.课程号 =c.课程号 

where b.成绩 >70;

 

 -查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩


【知识点】分组+条件+多表连接

翻译成大白话:计算每个学号不及格分数个数,筛选出大于2个的学号并找出姓名,平均成绩,思路如图:




select b.姓名,avg(a.成绩),a.学号  

from score as a

inner join student as b

on a.学号 =b.学号 

where a.成绩 <60

group by a.学号 

having count(a.学号 ) >=2;

 

-查询不同课程成绩相同的学生的学生编号、课程编号、学生成绩




select distinct a.学号 ,a.成绩 ,a.课程号 

from score as a

inner join score as b

on a.学号 =b.学号 

where a.成绩 =b.成绩 and a.课程号 != b.课程号 ;


-查询课程编号为“0001”的课程比“0002”的课程成绩高的所有学生的学号


【知识点】多表连接+条件,思路如图

 


select a.学号  

from

(select 学号 ,成绩 from score where 课程号=01) as a

inner join

(select 学号 ,成绩 from score where 课程号=02) as b

on a.学号 =b.学号 

inner join student c on c.学号 =a.学号 

where a.成绩 >b.成绩 ;

 

-查询学过编号为“0001”的课程并且也学过编号为“0002”的课程的学生的学号、姓名


思路如图






select a.学号  

from

(select 学号 ,成绩 from score where 课程号=01) as a

inner join

(select 学号 ,成绩 from score where 课程号=02) as b

on a.学号 =b.学号 

inner join student c on c.学号 =a.学号 

where a.成绩 >b.成绩 ;


-查询学过“孟扎扎”老师所教的所有课的同学的学号、姓名


思路如图

 




select s.学号 ,s.姓名,a.学号 ,b.课程号,c.教师号 ,c.教师姓名

from student as s  

inner join score as a  

on s.学号 =a.学号 

inner join  course  b on a.课程号 =b.课程号

inner join  teacher c  on b.教师号 = c.教师号

where c.教师姓名 ='孟扎扎';

 

-查询没学过"孟扎扎"老师讲授的任一门课程的学生姓名 (与上题类似,"没学过"用not in来实现)

 



select 姓名 ,学号 

from student

where 学号 not in (

select a.学号 

from student as a

inner join score as b

on a.学号 =b.学号 

inner join course as c on b.课程号 =c.课程号 

inner join teacher as d on c.教师号 =d.教师号 

where d.教师姓名 ='孟扎扎');

 

-查询没学过“孟扎扎”老师课的学生的学号、姓名(与上题类似)

 



select 学号, 姓名 

from student

where 学号 not in

(select 学号 from score where 课程号=

(select 课程号 from course  where 教师号 = 

(select 教师号 from teacher where 教师姓名 ='孟扎扎')

)

);


 -查询选修“孟扎扎”老师所授课程的学生中成绩最高的学生姓名及其成绩(与上题类似,用成绩排名,用 limit 1得出最高一个)

 



select a.姓名,b.成绩 

from student as a

inner join score as b on a.学号=b.学号

inner join course as c on b.课程号 =c.课程号 

inner join teacher as d on c.教师号 = d.教师号 

where d.教师姓名 = '孟扎扎'

order by b.成绩 desc limit 1;



-查询至少有一门课与学号为“0001”的学生所学课程相同的学生的学号和姓名




select 学号 ,姓名 

from student

where 学号 in

(select distinct(学号) from score where 课程号 in

(select 课程号 from score where 学号=0001))

 and 学号 !=0001;


 -按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩


【知识点】多表连接 新建字段 ,思路如图





select a.学号,avg(a.成绩 ),

max(case when b.课程名称  = '数学' then a.成绩 else null end ) as '数学',

max(case when b.课程名称  = '语文' then a.成绩 else null end ) as '语文',

max(case when b.课程名称  = '英语' then a.成绩 else null end ) as '英语'

from score as a

inner join course as b

on a.课程号 =b.课程号 

group by a.学号 ;


4.SQL高级功能




-查询学生平均成绩及其名次


【知识点】窗口函数排名,思路如图

 



select 学号 ,avg(成绩),

row_number () over( order by avg(成绩) desc)

from score

group by 学号  ;


-按各科成绩进行排序,并显示排名



select 课程号 ,

row_number () over(partition by 课程号 order by 成绩 )

from score ;


-查询每门功成绩最好的前两名学生姓名


【知识点】窗口函数排名+多表连接+条件


 



select a.课程号 ,b.姓名 ,a.成绩,a.ranking from (

select 课程号 ,学号 ,成绩 ,

row_number () over(partition by 课程号 order by 成绩 desc) as ranking

from  score) as a

inner join student as b on a.学号 =b.学号 

where a.ranking <3 ;

 

-查询所有课程的成绩第2名到第3名的学生信息及该课程成绩(与上一题相似)

 



select b.姓名 ,a.课程号 ,a.成绩 

from (

select 课程号 ,学号 ,成绩 ,

row_number () over( partition by 课程号 order by 成绩 desc) as ranking

from  score ) as a

inner join student as b

on a.学号 =b.学号 

where a.ranking in( 2,3) ;


-查询各科成绩前三名的记录(不考虑成绩并列情况)(与上一题相似)

 



select b.姓名 ,a.课程号 ,a.成绩 

from (

select 课程号 ,学号 ,成绩 ,

row_number () over( partition by 课程号 order by 成绩 desc) as 'ranking'

from  score ) as a

inner join student as b

on a.学号 =b.学号 

where a.ranking <4 ;


这些题要融会贯通,以后碰到类似的面试题都可以找到对应场景的使用案例。


推荐: 如何从零学会sql?



哆哆女性网薄情王爷下堂妻蜀汉之庄稼汉轮胎有限公司起名取名起名大全免费网打分米香李姓两个字的男孩起名起名网大师免费名字必胜客公众号起什么名字属龙的属相婚配表s6符文起名字影视公司钮起名男孩八字起名 计算帝级大明星查姓起名男孩子155是移动还是联通关于励志的起名事业单位工作人员年度考核个人总结姓包男孩起什么名字大全亡者归来第一季电影甜蜜蜜克隆人战争第四季都市猎人新岛咖啡鲨海逃生八字缺金起什么名起游戏名1518公司起名评分2021年五行起名淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻不负春光新的一天从800个哈欠开始有个姐真把千机伞做出来了国产伟哥去年销售近13亿充个话费竟沦为间接洗钱工具重庆警方辟谣“男子杀人焚尸”男子给前妻转账 现任妻子起诉要回春分繁花正当时呼北高速交通事故已致14人死亡杨洋拄拐现身医院月嫂回应掌掴婴儿是在赶虫子男孩疑遭霸凌 家长讨说法被踢出群因自嘲式简历走红的教授更新简介网友建议重庆地铁不准乘客携带菜筐清明节放假3天调休1天郑州一火锅店爆改成麻辣烫店19岁小伙救下5人后溺亡 多方发声两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#青海通报栏杆断裂小学生跌落住进ICU代拍被何赛飞拿着魔杖追着打315晚会后胖东来又人满为患了当地回应沈阳致3死车祸车主疑毒驾武汉大学樱花即将进入盛花期张立群任西安交通大学校长为江西彩礼“减负”的“试婚人”网友洛杉矶偶遇贾玲倪萍分享减重40斤方法男孩8年未见母亲被告知被遗忘小米汽车超级工厂正式揭幕周杰伦一审败诉网易特朗普谈“凯特王妃P图照”考生莫言也上北大硕士复试名单了妈妈回应孩子在校撞护栏坠楼恒大被罚41.75亿到底怎么缴男子持台球杆殴打2名女店员被抓校方回应护栏损坏小学生课间坠楼外国人感慨凌晨的中国很安全火箭最近9战8胜1负王树国3次鞠躬告别西交大师生房客欠租失踪 房东直发愁萧美琴窜访捷克 外交部回应山西省委原副书记商黎光被逮捕阿根廷将发行1万与2万面值的纸币英国王室又一合照被质疑P图男子被猫抓伤后确诊“猫抓病”

哆哆女性网 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化