SQL 经典50题(题目+解答)(3)

MySQL全方位练习(学生表 教师表 课程表 分数表) 一、创建表并初始化数据 1、表说明 student(学生表)、teacher(教师表)、course(课程表)、sc(分数表) 2、创建表 //学生表create table student( sno varchar2(10) primary key, sname varchar2(20), sage number(2), ... 阅读详情

前篇(1)和(2)

题解

32、查询平均成绩大于等于85的所有学生的学号、姓名和平均成绩

## 窗口函数
SELECT DISTINCT st.s_id, st.s_name, n.avg_score   ## 使用窗口函数必须使用DISTINCT
FROM
		(SELECT *
			FROM
					(
					SELECT s_id, s_score, 
								 AVG(s_score) OVER(PARTITION BY s_id) avg_score
					FROM Score 
					) m 
			WHERE m.avg_score > 85
		) n
JOIN Student st
ON n.s_id = st.s_id
# 聚合函数
SELECT st.s_id, st.s_name, AVG(sc.s_score) avg_score
FROM Student st 
JOIN Score sc 
ON st.s_id = sc.s_id
GROUP BY st.s_id
HAVING avg_score >= 85;

33、查询每门课程的平均成绩,结果按平均成绩升序排序,平均成绩相同时,按课程号降序排列

SELECT c_id, 
			 AVG(s_score) avg_score
FROM Score
GROUP BY c_id
ORDER BY avg_score ASC, c_id DESC;

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

SELECT st.s_name, sc.s_score
FROM Score sc
JOIN Course c 
ON sc.c_id = c.c_id 
		AND c.c_name = "数学"  # 因为是INNER JOIN,可以不放在WHERE
		AND sc.s_score < 60
JOIN Student st
ON sc.s_id = st.s_id

35、查询所有学生的课程及分数情况(存在学生没成绩,没选课的情况)

SELECT st.s_id, st.s_name, sc.c_id, c.c_name, sc.s_score
FROM Student st
LEFT JOIN Score sc 
ON sc.s_id = st.s_id
LEFT JOIN Course c
ON c.c_id = sc.c_id 

36、查询任何一门课程成绩在70分以上的姓名、课程名称和分数

## 错误:没有考虑没有选课和没有分数的情况
-- SELECT st.s_name, c.c_name, n.s_score
-- FROM 
-- 		(
-- 				SELECT * 
-- 				FROM 
-- 						(
-- 						SELECT *, 
-- 									 MIN(s_score) OVER(PARTITION BY s_id ORDER BY s_score) min_score
-- 						FROM Score
-- 
-- 						) m  # [所有]这个条件的方法之一:通过找边界值来进行限定
-- 				WHERE m.min_score > 70
-- 		) n
-- JOIN Student st 
-- ON st.s_id = n.s_id
-- JOIN Course c 
-- ON c.c_id = n.c_id
-- 
## 正解
SELECT n.s_name, n.c_name, n.score  
FROM 
		( 
		SELECT s_id,
	         MIN(s_score) min_score
    FROM Score sc
		GROUP BY s_id
		HAVING min_score > 70
		) m  # 满足条件的学生id
JOIN 
		(
		SELECT st.s_id, st.s_name, IFNULL(sc.s_score, 0) score, c.c_name
		FROM Student st 
		LEFT JOIN Score sc 
		ON st.s_id = sc.s_id
		LEFT JOIN Course c
		ON c.c_id = sc.c_id
		) n  # 将特殊值变为0
ON m.s_id = n.s_id

37、查询学生不及格的课程并按课程号从大到小排列

SELECT st.s_id,st.s_name, c.c_id, c.c_name
FROM Score sc 
JOIN Course c
ON sc.c_id = c.c_id
JOIN Student st
ON st.s_id = sc.s_id
WHERE sc.s_score < 60
ORDER BY c_id DESC

38、查询课程编号为03且课程成绩在80分以上的学生的学号和姓名

SELECT st.s_id, st.s_name
FROM Score sc
JOIN Student st
ON sc.s_id = st.s_id
WHERE sc.c_id = '03' AND sc.s_score > 80

39、求每门课程的学生人数

SELECT c.c_id, c.c_name, COUNT(sc.s_id) cnt_student
FROM Score sc
JOIN Course c 
ON sc.c_id = c.c_id
GROUP BY c.c_id

40、查询选修“张三”老师所授课程的学生中成绩最高的学生姓名及其成绩

SELECT m.s_name, m.c_name, m.s_score
FROM 
		(			
		SELECT st.s_name, c.c_name, sc.s_score,
					 RANK() OVER(PARTITION BY c.c_id ORDER BY sc.s_score) rk_score
		FROM Score sc 
			JOIN Course c 
			ON sc.c_id = c.c_id
			JOIN Teacher t
			ON t.t_id = c.t_id
			JOIN Student st
			ON st.s_id = sc.s_id
		WHERE t.t_name = "张三"
		) m
WHERE m.rk_score = 1

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

SELECT sc1.s_id, sc1.c_id, sc1.s_score  # 全部的字段来自一张表:使用自相连
FROM Score sc1
JOIN Score sc2 
ON sc1.s_score = sc2.s_score 
	 AND sc1.s_id != sc2.s_id 
	 AND sc1.c_id != sc2.c_id

42、查询每门功成绩最好的前两名

SELECT st.s_id, st.s_name, c.c_id, c.c_name, n.s_score
FROM
(
		SELECT * 
		FROM 
				(
				SELECT *,
							 ROW_NUMBER() OVER(PARTITION BY c_id ORDER BY s_score DESC) rk_score
			  FROM Score 
				) m 
		WHERE m.rk_score <= 2
) n 
JOIN Student st
ON n.s_id = st.s_id 
JOIN Course c
ON c.c_id = n.c_id

43、统计每门课程的学生选修人数(超过5人的课程才统计)。

– 要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列

SELECT c_id, COUNT(s_id) cnt_student
FROM Score
GROUP BY c_id
HAVING cnt_student > 5
ORDER BY cnt_student DESC, c_id ASC

44、检索至少选修两门课程的学生学号

SELECT m.s_id  # 用窗口函数更简单
FROM 
		(
		SELECT s_id, 
					 COUNT(c_id) cnt_course
		FROM Score
		GROUP BY s_id
		HAVING cnt_course >= 2
		) m

45、查询选修了全部课程的学生信息

## 【全部】这个条件使用”计数“的方式来进行限制
SELECT DISTINCT st.*
FROM 
		(
		SELECT * 
		FROM
				(
				SELECT *,
							 COUNT(*) OVER(PARTITION BY s_id) cnt_course
				FROM Score
				) m  # 课程数量
		WHERE cnt_course = (SELECT COUNT(c_id) FROM Course)
		) n  # 满足课程数量
JOIN Student st
ON n.s_id = st.s_id;

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

SELECT IF(m.month != 0, CONCAT(m.year, "岁", m.month, "个月"), CONCAT(m.year, "岁"))  "年龄"
FROM 
		(
		SELECT FLOOR(DATEDIFF(CURRENT_DATE, s_birth) / 365) year, 
					 ROUND((DATEDIFF(CURRENT_DATE, s_birth) % 365) / 30) month
		FROM Student
		) m
		

47、查询没学过“张三”老师讲授的任一门课程的学生姓名

# 有点小难
SELECT n.s_name
FROM 
		(
		SELECT st.s_name, COUNT(c_id)
		FROM Student st 
		LEFT JOIN 
				(
				SELECT sc.*, c_name, t_name
				FROM Score sc 
				JOIN Course c
				ON c.c_id = sc.c_id
				JOIN Teacher t
				ON t.t_id = c.c_id AND t.t_name = "张三"
				) m   # 满足张三老师课程的全部信息
		ON st.s_id = m.s_id
		GROUP BY st.s_id
		HAVING cnt_course = 0  # 与学生信息LEFT JOIN,找出交集数量为0的学生
		) n

48、查询两门以上不及格课程的同学的学号及其平均成绩

SELECT n.s_id, AVG(sc.s_score) avg_score
FROM
		(
		SELECT m.s_id
		FROM (
					SELECT *,
								 ROW_NUMBER() OVER(PARTITION BY c_id ORDER BY s_score) rk_score
					FROM Score
					) m
		WHERE rk_score = 2 AND s_score < 60  # 倒数第二门成绩的分数小于60分
		) n  # 满足条件的学生id
JOIN Score sc 
ON n.s_id = sc.s_id 
GROUP BY sc.s_id

49、查询本月过生日的学生

SELECT s_name
FROM Student
WHERE MONTH(s_birth) = MONTH(CURRENT_DATE)

49.1、查询下月过生日的学生

SELECT s_name
FROM Student
WHERE MONTH(s_birth) = MONTH(CURRENT_DATE) + 1

50、查询本周过生日的学生

SELECT s_name
FROM Student
WHERE WEEK(s_birth) = WEEK(CURRENT_DATE)

50.1、查询下周过生日的学生

SELECT s_name
FROM Student
WHERE WEEK(s_birth) = WEEK(CURRENT_DATE) + 1
2022年SQL经典面试题总结(带解析) 吐血整理了一周SQL面试题,包括了选择题、问答题、实战题。每道题都给大家加了详细的解析。几乎每个知识点都涉及到了。刷完这套题,关于SQL的面试妥妥的。题目来源:各大厂面试题、牛客网1、要求删除商品表中价格大于3000的商品,下列SQL语句正确的是()A、DELETE FROM 商品 WHERE 价格>3000 B、DELETE * FROM 商品 WHERE 价格>3000 C、DELETE FROM 商品 D、UPDATE 商品 SET * =NULL WHERE 价格>30002、在book表中,将工具 阅读详情

相关推荐

SQL基础题型(内含数据库和答案),帮你更加熟练运用SQL

下面分享关于SQL的题目,包括数据库和答案解析。希望对大家有帮助。

m0_57448314的博客 2888

50道SQL练习题及答案与详细分析

50道SQL练习题及答案与详细分析

向上的"狼"的博客 5877

SQL 经典50题(题目+解答)(1)

SQL 经典50题(题目+解答)(1)

Robin_Pi的博客 1万+

常见的SQL面试题:经典50题(附详解)

已知有如下4张表: 学生表:student(学号,学生姓名,出生年月,性别) 成绩表:score(学号,课程号,成绩) 课程表:course(课程号,课程名称,教师号) 教师表:teacher(教师号,教师姓名) 根据以上信息按照下面要求写出对应的SQL语句。 ps:这些题考察SQL的编写能力,对于这类型的题目,需要你先把4张表之间的关联关系搞清楚了,最好的办法是自己在草稿纸上画出关联图,然后再编...

q_1092535160的博客 1万+

Mysql经典50题--第一弹

在初学时期看到了大家都在发的Mysql经典50题,做过一遍之后的第二次回顾

查数菇乐园 5634

MySQL学习:50道经典题目(含参考答案)(更新中)

首先根据course_id将成绩表分为两张表,筛选出" 1 "课程比" 2 "课程成绩高的学生,再与学生表关联。1. 查询" 1 "课程比" 2 "课程成绩高的学生的信息(学号、姓名、性别、出生日期)及课程分数。利用自连接,统计比当前分数高的分数有几个,排名就是几加1。使用case when语句,多个排序条件时用逗号分隔。利用课程数量,计算出所有课程数和每个学生的选课数量。先筛选与" 1 "号同学选课数量相同的同学,再剔除。10. 查询没有学全所有课程的同学的信息。选了" 1 "号同学没选的课的同学。

weixin_42661635的博客 1万+

SQL经典50题 | 附答案

大家好,我是宝器! 今天给大家分享一份星友对SQL经典面试50题的刷题记录,宝器稍作了一些修改,以下是星友自述正文: 看完了SQL基础教程,然后再看SQL进阶教程感觉有些不是很懂,于是就开始刷题熟悉⼀下基础知 识,找了⽐较经典的很多⼈都刷过的SQL⾯试50题,B站也有挺好的视频解答,看题先⾃⼰做,不会就看视频解答,感觉难题都在前⾯。 刚开始基本是边看边做,慢慢后⾯简单了,基本能⾃⼰先做了再看,断断续续终于刷完了全部题⽬,重新梳理⼀遍看看知识点,分享⼀下刷题的代码,视频基本讲解很清楚了...

茹茹的博客 2万+

sql50道题-mysql版,附详细解答

sql50道题-mysql版,附详细解答 实验狗插空写了网上流行的sql经典50题。做完这些题对于看书的锻炼巩固效果还是很棒的,又不至于很难,不会打击到学习的信心,对于新手来说适合练手,推荐! 废话不多说,我先把题目全部贴出来,先自己做,然后再看答案效果会好很多哦! 在代码部分我附了自己的答题思路,以及相关的知识点的干货链接,不明白知识点的点进去学习一波再继续做下去吧。 欢迎纠错讨论...

hetti的博客 1724

MySQL 经典练习 50 题(完美解答版)

MySQL 经典练习 50 题(完美解答版)创建数据库和表数据库学生表课程表教师表成绩表表关系经典练习 50 题1、查询"01"课程比"02"课程成绩高的学生的信息及课程分数2、查询"01"课程比"02"课程成绩低的学生的信息及课程分数3、查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩4、查询平均成绩小于60分的同学的学生编号和学生姓名和平均成绩(包括有成绩的和无成绩的)5、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩6、查询"李"姓老师的数量7、询学过"张三"老师授课的同学

GodSuzzZ的博客 17万+

FPGA实战:用DDR3和乒乓操作解决视频帧撕裂问题(附Verilog代码)

本文详细介绍了如何利用DDR3内存和乒乓操作架构解决FPGA视频处理中的帧撕裂问题。通过多帧缓存原理、AXI接口配置和自适应乒乓操作设计,有效隔离读写操作,确保视频流稳定传输。文章包含Verilog代码实现和性能优化技巧,适用于工业相机、医疗影像等高速视频处理场景。

m2n3b4v5c6的博客 290

Win11下高效管理JDK1.8与JDK17双环境的实战指南

本文提供了一份在Windows 11系统上高效管理JDK 1.8与JDK 17双环境的实战指南。文章详细讲解了如何实现双版本切换,包括如何干净安装两个JDK、通过巧妙配置环境变量实现命令行一键切换,以及在不同IDE和构建工具中为项目独立配置JDK版本,旨在帮助Java开发者彻底解决版本冲突问题,提升开发效率。

ipfs8storage的博客 544

深夜小酌,50道经典SQL题,真香~

蹲坑之余,在网上找到了50道所谓经典SQL题,这不就是深夜必备小菜?我用脚叼起拖鞋,从冰箱拿出封印已久的半瓶可乐,打开数日未见的MySQL8,来吧,来场说卷就卷的刷题。

陈哈哈的菜园子 6223

宏基因组分析|完整分析流程梳理

今天先从最基础的全流程框架说起,无论是刚接触的萌新,还是想查漏补缺的同行,都能找到有用的信息。

weixin_70911870的博客 3165

SQL经典面试50题 | 附答案

大家好,我是宝器!今天给大家分享一份星友对SQL经典面试50题的刷题记录,宝器稍作了一些修改,以下是星友自述正文:看完了SQL基础教程,然后再看SQL进阶教程感觉有些不是很懂,于是就开始...

weixin_44747933的博客 5735

uds协议之can总线程序升级

uds协议简介 如何利用uds协议升级 升级流程 uds服务类型介绍

fangye945a的博客 1万+

PID控制算法实践应用(一):PID算法的离散化

由于计算机控制是一种采样控制,它只能根据采样时刻的偏差值计算控制量。因此,连续PID控制算法不能直接使用,需要采用离散化方法。

m0_72676510的博客 2602

SQL练习——经典50题

mysql50题练习,包含数据和解答

小雨不冷的博客 9853

YOLOv13全网首发:CVPR2026 MixerCSeg | DEGConv方向引导边缘门控,破解细长裂缝检测难题

DEGConv通过方向先验嵌入、边缘增强卷积和动态门控三大机制,针对性解决了YOLO在处理裂缝类细长、多方向、低对比度目标时的特征提取不足问题,显著提升了裂缝检测的精度与鲁棒性。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 442

SQL面试必会50题(含答案和学习链接)

最近在刷 sql 题,刷完了网上的 SQL 面试必会 50 题,现把我的答案和思路整理如下,供大家参考。 这是目录一、创建四张表二、SQL面试必会50题(不含答案)三、SQL面试必会50题(含答案)四、学习资料 一、创建四张表 如图,以上学生表、成绩表、课程表、教师表是我们所有题目的基础表,创建的语句如下: --学生表 CREATE TABLE `Student`( `s_id` VARCHAR(20), `s_name` VARCHAR(20) NOT NULL DEFAULT '', `s_bir.

欢迎来到小丁的技术空间 3万+

RK3568笔记六十一:MIPI摄像头应用程序编写

V4L2设备驱动框架向应用层提供了一套统一、标准的接口规范,应用程序按照该接口规范来进行应用编程,从而使用摄像头。对于摄像头设备来说,其编程模式如下所示:1.首先是打开摄像头设备;2.查询设备的属性或功能;3.设置设备的参数,譬如像素格式、帧大小、帧率;4.申请帧缓冲、内存映射;5.帧缓冲入队;6.开启视频采集;7.帧缓冲出队、对采集的数据进行处理;8.处理完后,再次将帧缓冲入队,往复;9.结束采集。

1004

computer planetary——全球生物多样性信息机构 (GBIF)

正如npartitions所表明的,这个Parquet数据集是由许多单独的parquet文件组成的。(GBIF) 是一个由世界各国政府资助的国际网络和数据基础设施,提供记录物种发生的全球数据。重新处理数据的原因有多种,包括主干分类的更改,因此该日期不一定是发生记录最后更改的日期。GBIF 发生数据集结合了来自广泛来源的数据,包括来自自然历史博物馆的标本相关数据、来自公民科学网络的观察和自动环境调查。为了了解最常观察到的物种,我们将对数据集进行分组,并获得每个物种的计数。大多数字段名称对应于。

此星光明博客 1636

SQL 经典50题(题目+解答)(2)

SQL 经典50题(题目+解答)(2)

Robin_Pi的博客 4748

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

互联网校招SQL笔试经典50题及答案解析

互联网校招SQL笔试经典50题及答案解析TOMOCAT​南开大学 应用统计硕士86 人赞同了该文章练习前的准备1、SQL环境搭建https://www.jianshu.com/p/edca5142391c2、建表语句create table Student(sid varchar(10),sname varchar(10),sage datetime,ssex nvarchar(10)); ins...

qq_35854212的博客 3521

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

上一篇: SQL 经典50题(题目+解答)(2)
下一篇: SQL常见技巧:行转列
Robin_Pi
博客等级 码龄9年 2万+粉丝 632原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值