图解面试题:经典50题!掌握这些题,面试也太简单了!

news2025/1/12 3:54:10

87ab08e205858423ae61febc9ba73684.jpeg

已知有如下4张表:

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

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

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

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

c610ac53adcba2db7efe653cd8032721.jpeg

1.汇总分析

5a8b78504882d634f1ed3122b831caab.png

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

/*
【知识点】分组查询
分析思路
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;


3.多表查询

1037ce417f84fa32ebdfd8aa153be183.png

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

思路如图:

42397fa82a9749e8cd3fcca5d3b5ebdb.png

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;

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

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

b49a1baf9dc60d94c0a7d4eb398ec2c2.png

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的学生姓名和分数

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

67807fe2614fd98ada0f5244a520e7cb.jpeg

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个的学号并找出姓名,平均成绩,思路如图:

0ed9ae2497c2fdcb10c7b877225f7be9.png

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;

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

9797a3fdc75bad70d51ec372b4fe0975.png

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”的课程成绩高的所有学生的学号

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

6467e4c5affafbdd77375cb04e7e6212.png

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”的课程的学生的学号、姓名

思路如图

99ac34c47370db9e57ae7b819d1f2730.png

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.成绩 ;

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

思路如图

cd39f6c6625c9e9a0dd70375619fc053.png

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;

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

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

ba0dd643fe374200a247b4c993aa4b4a.png

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高级功能

bd434d7a3a9f9e30e2cc069b17247297.jpeg

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

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

389ad7c587abb7e1ae47c7af351eec30.png

select 学号 ,avg(成绩),
row_number () over( order by avg(成绩) desc)
from score
group by 学号  ;

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

ee1ffc5835cdcb351b21026b93d79a67.png

select 课程号 ,
row_number () over(partition by 课程号 order by 成绩 )
from score ;

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

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

277fc1bed4e7bcec42e70a96df7a8bd2.png

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 ;

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

cf540479eeaf06f0719eb5f5acebdb02.jpeg ⬇️点击「阅读原文」

 免费报名 数据分析训练营

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/146012.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS基础知识(盒子模型)

继承上一篇CSS的三大特性的优先级继续讲解。 1.1优先级 优先级注意点&#xff1a; 权重是有4组数字组成的&#xff0c;但是不会有进位。可以理解为类选择器永远大于元素选择器&#xff0c;id选择器永远大于类选择器以此类推。等级判断从左向右&#xff0c;如果某一位数值相同…

前端学习之CSS基础

前言 html标签就不说了&#xff0c;这次学习CSS样式&#xff0c;就是美化html标签。 快速了解什么是css 普通标签&#xff1a; 加了css样式&#xff1a; <img src"https://static.runoob.com/images/icon/mobile-icon.png" style"height:100px" /&…

No module named ‘pycocotools’

网上搜了之后 按照网上的去做 全都无果 开始自己探索 原本我pycharm里选的环境是 python3.8 (pytorch)winR输入cmd进去后 输入 python –V返回的是本地python版本2.7 所以我当前系统python版本和我pycharm里选的不一样 然而pycocotools这个包本质上应该是安装在我pycharm里…

Referer;盗链;防盗链的工作原理

目录 Referrer-policy 如何设置referer 盗链 防盗链的工作原理 绕过图片防盗链 设置meta 设置referrerpolicy"no-referrer" 客户端在请求时修改header头部 利用https网站盗链http资源网站&#xff0c;refer不会发送 常见防盗链方法 利用nginx 服务器端判…

python基础语法一

一、变量 1.1、变量定义 变量就是可变的量&#xff0c;对于一些有可能会经常变化的数据&#xff0c;我们需要使用一个符号&#xff0c;这样才能计算中使 用它&#xff0c;就像我们在小学时学过的一元方程中的"x"一样。比如说&#xff0c;我们在控制台内输入&#xf…

Java 集合List接口介绍和使用

List接口的基本介绍 1.List接口是Collection的子接口 2.List中的元素都是有序的除了LinkedList。 一些实用的方法 1.add()添加元素 2.get()得到指定位置的元素 3.addAll&#xff08;&#xff09;追加一个List 4.indexOf&#xff08;&#xff09;返回元素的位置 5.remove…

人工智能 -多任务编程、进程、线程介绍

目录1&#xff0c; 多任务的概念2&#xff0c;进程2.1进程的介绍2.2多进程完成多任务2.3进程执行带有参数的任务2.4获取进程编号2.5进程间不共享全局变量2.6主进程和子进程的结束顺序3、线程3.1多线程完成多任务3.2线程执行带有参数的任务3.3主线程和子线程的结束顺序3.4线程中…

连续子数组的最大和(从暴力理解到DP)

连续子数组的最大和题目思路暴力解题思路画出矩阵进行分析确定转移方程DP代码题目 思路 从leetcode上看到的题解&#xff0c;突然恍然大悟&#xff0c;之前不容易理解转移方程终于理解了&#xff0c;这个思路真的对新手很友好&#xff0c;现在出一个C版本&#xff0c;而且&…

谷歌出品,数据集搜索引擎上线了!

文 | 小戏记得在刚入门 ML 时&#xff0c;希望找到一个关于特定领域下的数据集&#xff0c;涉世未深的我在中文互联网不断搜索&#xff0c;可每每点进链接出来的都是某 SDN 下载的高价勒索。用惯了直接从老师同学那里讨来的数据集的我第一次感受到了“寻找数据集”这样一个简单…

【并查集】实现思路及例题

一、应用场景 用于处理不相交集合的合并和查询问题 示例&#xff1a; n 个元素&#xff08;分属不同的的 n 个集合&#xff09;&#xff0c;进行两种操作&#xff1a; 并 —— 给出两个元素的关系&#xff0c;合并两个集合查 —— 查询两个元素是否在同一个集合 二、并查集…

「数据密集型系统搭建」原理篇|用什么方式存储数据最合适

本篇来聊聊数据存储的内容&#xff0c;看看程序世界里数据是以什么形式存在的&#xff1f;为了描述数据并把它们和这个现实世界关联起来我们一般都是如何去进行表达的&#xff1f;最后通过我们习惯的表达方式再结合数据结构是如何存储下来的&#xff1f; 在进行技术方案设计的时…

分享102个PHP源码,总有一款适合您

PHP源码 分享117个PHP源码&#xff0c;总有一款适合您 PHP源码下载链接&#xff1a;https://pan.baidu.com/s/1Ike0x99BcMfZPy6tFSpM9w?pwdzqem 提取码&#xff1a;zqem import os from time import sleepimport requests from bs4 import BeautifulSoup from docx import D…

Linux 系统Bash的常用功能

了解了基本的Linux文件文件系统的概念后,我们将更深入的了解一下Linux的其他方面的内容,那就是我们所使用的用户接口,也就是大家常听到的 Shell ,是一种Linux的命令接口,在 Linux 的世界中,默认使用的是 GNU 开发出来的 shell ,称为 BASH Shell,简单来说,我们之前使用的几个命令…

10.JS笔记-对象

1、什么是对象 对象是一个具体的事物&#xff0c;在js中&#xff0c;对象是一组无序的属性和方法的集合 属性&#xff1a;事物的特征 方法&#xff1a;事物的行为 2、创建对象 利用字面量创建对象利用new Object创建对象利用构造函数创建对象 2.1 变量、属性和方法、函数的…

人工智能的核心技术是什么?

&#xff08;本文阅读时间&#xff1a;5分钟&#xff09;人工智能的核心技术是它的算法被广泛认可的「算法」专业定义是&#xff1a;算法是模型分析的一组可行的&#xff0c;确定的&#xff0c;有穷的规则。基于规则的人工智能上个世纪六七十年代出现的早期人工智能系统都是基于…

VueJs中如何自定义hooks(组合式)函数

前言在Vue当中,一个非常重要的功能就是组件的复用,编写Vue组件,更多的也是在拼装组件,将页面的各个功能进行模块化便于维护和管理,而在项目里,有些页面中的组件的逻辑功能是一样的,如果没有进行功能逻辑的复用,那么每个页面都需要重复的写一遍在Vue当中各个组件是保持独立的,如…

一份职业游戏3D建模师日常工作流程列表,看完不信还有人说建模门槛低

随着游戏行业的发展&#xff0c;越来越多的人开始对这个行业感兴趣&#xff0c;因此有很多的小伙伴梦想成为一个游戏模型师&#xff0c;成为游戏行业里的一员。但是很多人都对这个工作具体是做什么的并不是很了解&#xff0c;下面&#xff0c;我们就来说说游戏模型师的主要工作…

Word处理控件Aspose.Words功能演示:使用 C# 将 DOCX 转换为 HTML

Aspose.Words 是一种高级Word文档处理API&#xff0c;用于执行各种文档管理和操作任务。API支持生成&#xff0c;修改&#xff0c;转换&#xff0c;呈现和打印文档&#xff0c;而无需在跨平台应用程序中直接使用Microsoft Word。此外&#xff0c; Aspose API支持流行文件格式处…

Javascript:Class构造函数

为什么需要class 在其他语言中class已经是一个早就被实现的功能&#xff0c;在JavaScript中一直到ES6被实现。在class没有实现之前我们是这样写的&#xff08;如下代码&#xff09; function Person(name,sex){this.name this.sex } Person.prototype.sayfunction(){alert(h…

金融类的APP该如何进行ASA推广

移动理财成为新金融的主流&#xff0c;在如今&#xff0c;金融机构都在争相推出自己的移动理财产品&#xff0c;那今天柚鸥ASO就来给大家讲一下&#xff0c;金融类的APP在进行ASA前的一些注意事项。 APP进行ASA前的开户有两种&#xff1a; 自主开户&#xff08;1&#xff0c;…