Mysql-练习50题个人记录(1-17)

sql语句练习50题(Mysql版) 数据来自@廖致君 参考@启明星的指引 数据字典 可以复制到电脑的记事本或者备忘录,方便及时查阅,加粗的是主键。 1、学生表 Student(Sid, Sname, Sage, Ssex)——学生表(学号,姓名,出生日期,性别) 2、课程表 Course(Cid, Cname, Tid)——课程表(课程编号,课程名称,教师编号) 3、教师表 Teacher(Tid, Tname)——教师表(教师编... 阅读详情

偶然搜索看到了大佬的训练题,我也跟着大佬思路过了一遍。
大佬链接:点这里
在这个链接里面有表以及数据,下面开始第一题
1、查询"01"课程比"02"课程成绩高的学生的信息及课程分数

select stu.*,sc1.s_score as '语文',sc2.s_score as '数学' 
from Student stu
left join Score sc1 on stu.s_id =sc1.s_id and sc1.c_id ='01'
left join Score sc2 on stu.s_id =sc2.s_id and sc2.c_id ='02'
where sc1.s_score >sc2.s_score ;

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

select stu.*,sc1.s_score as '语文',sc2.s_score as '数学'
from Student stu
left join Score sc1 on stu.s_id = sc1.s_id and sc1.c_id = '01'
left join Score sc2 on stu.s_id = sc2.s_id and sc2.c_id = '02'
where sc1.s_score < sc2.s_score ;

3、查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩

select stu.s_id,stu.s_name,round(avg(sc.s_score),2)
from Student stu 
left join Score sc on stu.s_id = sc.s_id 
group by stu.s_id having AVG(sc.s_score) >=60 

这儿的round函数是控制小数的,比如说小数后两位,则写2。

4、查询平均成绩小于60分的同学的学生编号和学生姓名和平均成绩

select stu.s_id,stu.s_name,round(avg(sc.s_score),2)
from Student stu 
left join Score sc on stu.s_id  = sc.s_id 
group by stu.s_id having AVG(sc.s_score)<60;

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

select stu.s_id ,stu.s_name ,count(sc.c_id) '课程总数', sum(sc.s_score) '总分' 
from Student stu
left join Score sc on stu.s_id = sc.s_id 
group by stu.s_id ;

6、查询"李"姓老师的数量

select count(*) as '李数量' from Teacher t where t_name like '李%';

7、查询学过"张三"老师授课的同学的信息

select stu.* from Student stu
left join Score sc on stu.s_id = sc.s_id
left join Course c on sc.c_id = c.c_id 
left join Teacher t on c.t_id = t.t_id 
where t.t_name = '张三';

就把所有表连在一起

8、查询没学过"张三"老师授课的同学的信息

select stu.* from Student stu where stu.s_id not in(
select sc.s_id from Score sc where sc.c_id in (
select c.c_id from Course c join Teacher t on c.t_id = t.t_id 
where t.t_name ='张三' ));

三步:第一步,找到张三教授的课程号。第二步,找到选了这些课程号的学生编号。第三步,反选。

9、查询学过编号为"01"并且也学过编号为"02"的课程的同学的信息

select stu1.* from Student stu1
inner join Score sc1 on stu1.s_id = sc1.s_id 
inner join Course c1 on sc1.c_id = c1.c_id and c1.c_id = '01'
where stu1.s_id in (
select stu2.s_id from Student stu2
inner join Score sc2 on stu2.s_id = sc2.s_id 
inner join Course c2 on sc2.c_id = c2.c_id and c2.c_id = '02'
);

查询02课程的学号,通过where查看到两门课程都有学的学生的学号

10、查询学过编号为"01"但是没有学过编号为"02"的课程的同学的信息

select stu1.* from Student stu1
inner join Score sc1 on stu1.s_id = sc1.s_id 
inner join Course c1 on sc1.c_id = c1.c_id and c1.c_id = '01'
where stu1.s_id not in (
select stu2.s_id from Student stu2
inner join Score sc2 on stu2.s_id = sc2.s_id 
inner join Course c2 on sc2.c_id = c2.c_id and c2.c_id = '02'
);

11、查询没有学全所有课程的同学的信息

select stu.* from Student stu
left join Score sc on stu.s_id = sc.s_id 
group by stu.s_id 
having count(sc.c_id)<(select count(c.c_id) from Course c);

12、查询至少有一门课与学号为"01"的同学所学相同的同学的信息

select distinct stu.* from Student stu
join Score sc on stu.s_id = sc.s_id 
where sc.c_id in (
select sc2.c_id from Student stu2 join Score sc2 on
stu2.s_id = sc2.s_id where sc2.s_id = '01');

首先查找到01同学所有所学的课程,而后在这里面查找课程号

13、查询和"01"号的同学学习的课程完全相同的其他同学的信息

select distinct stu.* from Student stu
join Score sc on stu.s_id = sc.s_id 
group by stu.s_id 
having group_concat(sc.c_id) = (
select group_concat(sc2.c_id) from Score sc2 group by sc2.s_id 
having sc2.s_id='01');

这里使用到了group_concat函数,如下sql所示,我们希望按照s_id分组,并且分组后将c_id打印

select group_concat(c_id) from Score group by s_id;

如图所示:
在这里插入图片描述
这是一个比较有趣且实用的函数,是我个人首次认识。
14、查询没学过"张三"老师讲授的任一门课程的学生姓名

select stu.s_name,stu.s_id  from Student stu
where stu.s_id not in (
select s_id from Score sc 
join Course c on sc.c_id = c.c_id 
join Teacher t on c.t_id = t.t_id 
where t.t_name = '张三'
);

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

select stu.s_id,stu.s_name,round(AVG(sc.s_score),2)  
from Student stu
left join Score sc on stu.s_id = sc.s_id 
where stu.s_id in(
select sc2.s_id from Score sc2 
where sc2.s_score < 60
group by sc2.s_id having count(s_id)>=2
) group by stu.s_id 

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

select stu.*,sc.s_score,sc.c_id  from Student stu
join Score sc on stu.s_id = sc.s_id  
where sc.c_id  = '01' and sc.s_score<60
order by sc.s_score 

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

select stu.s_id,stu.s_name,sc1.s_score as "语文",sc2.s_score as "数学",sc3.s_score as "英语",round(AVG(sc.s_score),2) as "平均成绩"
from Student stu
left join Score sc on stu.s_id = sc.s_id 
left join Score sc1 on stu.s_id = sc1.s_id and sc1.c_id = '01'
left join Score sc2 on stu.s_id = sc2.s_id and sc2.c_id = '02'
left join Score sc3 on stu.s_id = sc3.s_id and sc3.c_id = '03'
group by stu.s_id 
order by AVG(sc.s_score) desc 
MySQL实战:案例全解析 MySQL数据库实用案例大全摘要 本文整理了MySQL数据库的100多个实用案例,涵盖基础操作到高级应用的各个方面。主要内容包括:数据库表创建与修改、数据增删改查、索引优化与事务处理等基础操作;视图、存储过程、触发器等高级功能实现;性能优化技巧如慢查询日志配置和分区表设计;安全设置包括用户权限管理和数据加密;以及JSON数据处理、全文检索、GIS地理查询等特色功能。还涉及数据库备份恢复、主从复制、集群配置等运维管理内容,以及大数据处理、时序数据库、机器学习集成等扩展应用场景。每个案例都提供可直接执行的SQL 阅读详情

相关推荐

MySQL50题-练习

SQL面试50题 看了一些SQL面试的题目,这里做个记录。本文代码为MySql。 这个练习题目里面共有四张表: Student 学生表 字段名 字段含义 字段类型 sid 学生编号 varchar(10) sname 学生姓名 varchar(10) sage 学生年龄 datetime ssex 学生性别 varchar(10) Student表数据 insert into St...

一个好学生_叶纪杉 2730

mysql多表查询30个经典案例

mysql多表查询30个经典案例

入佛门六根不净,入商场狼性不足 7158

MySQL 经典练习 50 题(易理解,测试通过)

文章目录创建数据库和表数据库学生表创建学生表插入学生数据课程表 course创建课程表 course插入课程数据教师表 teacher创建教师表 teacher插入教师数据成绩表 score创建成绩表 score插入成绩数据经典练习 50 题1、查询"01"课程比"02"课程成绩高的学生的信息及课程分数2、查询"01"课程比"02"课程成绩低的学生的信息及课程分数3、查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩4、查询平均成绩小于60分的同学的学生编号和学生姓名和平均成绩(包括有成绩的和无

qq_43317082的博客 5715

Mysql Sql 语句练习题 (50道)

use stu_db; show tables; select * from student; -- 表信息 # student: sid, sname, sage, sgender # teacher: tid, tname # course: cid, cname, tid # sc: sid, cid, score -- 1、查询"01"课程比"02"课程成绩高的学生的信息及课程分数 select st.*, sc1.score as '01', sc2.score as '02' from s

shihao的博客 791

mysql常见sql语句练习 sql练习题

1. Mysql基本语句复习 1.1数据库建库操作 这一章会把基本的mysql语句进行复习 打开Sqlyog,新建一个数据库 1.2建表操作 新建两张学习兴趣班级表:唱歌、跳舞 CREATE TABLE sing( s_num VARCHAR(5) NOT NULL UNIQUE COMMENT '身份证号,这儿为了方便以5位算', s_beginDate DATE COMMENT '入班时间' #指定存储引擎为INNODB(这个在优化的时候会学习) )ENGINE=INNODB DEFAULT CHA

weixin_39160689的博客 8502

Costas环参数调优指南:QPSK载波同步中的环路滤波器设计技巧

本文深入解析QPSK载波同步中Costas环的参数调优,特别是环路滤波器的设计技巧。通过分析星座图异常现象,提供从理论计算到MATLAB仿真的实战调优指南,涵盖环路带宽、阻尼系数等关键参数在不同信噪比场景下的选择策略,旨在解决载波同步失锁、性能下降等工程难题。

weixin_29035147的博客 546

Mysql经典例题练习与总结

Mysql练习题

qq_42265608的博客 4512

告别眼疲劳!保姆级教程:给你的SecureCRT v8.7.2换上护眼高亮配色(附透明背景设置)

本文提供了一份详细的SecureCRT v8.7.2护眼高亮配色方案教程,帮助程序员缓解眼疲劳问题。通过科学调整配色方案、动态环境自适应设置以及字体渲染优化,显著提升终端使用的舒适度和工作效率。特别推荐Solarized Dark和One Dark Pro医学适配版配色方案,适合长时间编码工作。

weixin_42549496的博客 354

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

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

GodSuzzZ的博客 17万+

IAR for ARM 搭建STM32F103C8T6工程模板(实战指南)

本文详细介绍了如何在IAR for ARM开发环境中为STM32F103C8T6微控制器搭建完整的工程模板。从环境准备、固件库获取、目录结构设计到工程配置与编译调试,提供了实战指南和常见问题解决方案,帮助开发者快速建立稳定的STM32开发环境。

fun88的博客 988

Altium AD20差分对走线设置方法

AD20的PCB差分对走线设置 1、原理图添加差分对 先在原理图中,讲要设置差分对的网络对添加网络标签。 名称前面的内容要相同,后缀用 _P 和 _N 加以区分。 最后使用 放置差分对,将两个网络标记。 2、编译,更改到PCB 编译,更新到PCB,确认差分对网络的出现。 验证更改,执行更改。将改动更新到PCB中。 PCB中,可通过 右下角 Panels - 调出 PCB 显示。来对已添加的差分对进行查看。 这时原本的走线有一点点小问题,需要删掉原来走线,设置差分对规则,并重新布线。

Mark_md的博客 3万+

MySQL 经典练习 50 题(完美解答版,提供解题思路)

为完成以下练习,我们需要创建一个包含学生、课程、教师、成绩信息的数据库,以及对应的4张表。:通过成绩表自连接,分别获取学生的01课程和02课程成绩,再关联学生表筛选符合条件的记录。存储学生的课程成绩,包括学号、课程编号、成绩(可空,代表未选课或未考试)。:筛选成绩<60的记录,按学生分组统计不及格课程数≥2,再计算平均成绩。:先找到01号学生学过的课程,再筛选学过这些课程的其他学生。:先找到学过01课程的学生,再排除学过02课程的学生。:先找到张三教的课程,再筛选这些课程中成绩最高的记录。

记录学习路上的每一个 “啊哈!” 时刻 欢迎交流,共同进步! 2296

华为[ENSP]OSPF的配置实例(单区域+多区域)

华为[ENSP]OSPF的配置实例(单区域+多区域)

weixin_62594100的博客 2万+

mysql经典50题(练习)

经典50题

cp1002327672的博客 3148

英飞凌Tricore实战系列导读

笔者结合项目应用经验对Tricore MCU的开发及应用经验进一步总结,成人达己,渡己渡人。

initiallizer的博客 3791

「深度学习之优化算法」(五)差分进化算法

每次迭代将先进行变异操作,选择一个或多个个体的基因作为基,然后选择不同的个体的差分来构成差分基因,最后将作为基的基因与差分基因相加来得出新的个体。,大喊一声,进化吧,魔王兵i的基因改变了。交叉率CR,影响基因取自变异基因的比例,由于至少要保留一位自己的基因和变异的基因导致CR在该问题上对算法性能的影响不大(这个问题比较简单,维度较低,影响不大)。与遗传算法同为进化算法的差分进化算法,它们的操作(算子)也都非常相似的,都是交叉,变异和选择,流程也几乎一样(遗传算法先交叉后变异,差分进化算法先变异后交叉)。

quanzhan_King的博客 1505

Mysql综合练习50题

Mysql综合练习50题 文章目录Mysql综合练习50题表关系建表插入数据操作表1、查询学生总人数;2、查询“生物”课程和“物理”课程成绩都及格的学生id和姓名;3、查询每个年级的班级数,取出班级数最多的前三个年级;4、查询平均成绩最高和最低的学生的id和姓名以及平均成绩;5、查询每个年级的学生人数;6、查询每位学生的学号,姓名,选课数,平均成绩;7、查询学生编号为“2”的学生的姓名、该学生成绩最高的课程名、成绩最低的课程名及分数;8、查询姓“李”的老师的个数和所带班级数;9、查询班级数小于5的年级id和

贤哲XianZhe的博客 1733

GEE高阶应用——如何绘制2000-2022年土地利用变化轨迹时序图

土地利用变化是指在一定时间范围内,土地利用类型和结构发生的变化。时序变化是指这种变化随时间的推移而发生的序列变化。土地利用变化轨迹的时序变化具体介绍如下:首先,土地利用变化轨迹的时序变化体现在土地利用类型的演变上。在过去的几十年里,随着人口的增加、经济的发展和城市化的推进,土地利用类型发生了显著的变化。传统的农田逐渐减少,而城市、工业、交通、居住等用地的面积不断扩大。同时,随着环境保护意识的提高,生态保护用地、森林、湿地等绿色用地的面积也在增加。

此星光明博客 1113

50道经典MySQL练习题(含解答)

本文摘要:本篇主要分享50道经典MySQL练习题(含解答)。

请你喝杯Java 1万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

MySQL之经典50道题

MySQL之经典50道题目一、创建数据表并插入数据 一、创建数据表并插入数据 1、学生表 Student(s_id,s_name,s_birth,s_sex) :学生编号、姓名、年月、性别 -- 1、学生表 -- Student(s_id,s_name,s_birth,s_sex) :学生编号、姓名、年月、性别 CREATE TABLE IF NOT EXISTS `Student` ( `s_id` VARCHAR (20), `s_name` VARCHAR (20) NOT NULL DEFA

qq_40216188的博客 1万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

MySQL--数据库练习巩固50题

本文提供了50道SQL练习题,涵盖学生、课程、教师和成绩四个表的查询操作。内容包含基础查询(如单表查询、分组统计)、复杂查询(如多表连接、子查询)、聚合分析(如求平均成绩、分数段统计)以及日期处理等场景。重点题目包括:查询成绩比较(如01课程比02高的学生)、排名计算(如课程前三名)、统计报表(如及格率计算)以及特殊条件筛选(如同名同姓学生)。练习涉及多种SQL技巧,包括CASE WHEN、JOIN、GROUP BY、HAVING以及窗口函数等,适合提升SQL综合能力。

恐龙让Lee的博客 1115

记录MYSQL经典50题练习QA(含如何创建数据库)

没有任何基础的小白可能会对练习前如何创建数据库有疑问。首先,在MYSQL里输入链接里给出的代码,创建总共有四个表score、student、teacher、course。我的第一段代码去掉了cascade,写成了如下所示,其他跟着文章复制粘贴完成→点击运行→左侧刷新数据库,然后就可以看见新数据库创建成功。练习题目如下:数据源于,练题顺序先参考的从易至难更适合我,有助于建立自信心,里面部分题目和数据源不符,于是我在练习的过程中结合数据源进行了适当修改,大部分题目都是适合的。以下是实际练习题目列表。

Ustinian99的博客 729

MySQL经典练习50题速成篇

文章目录MySQL经典练习50题前置数据:1、查询"01"课程比"02"课程成绩高的学生的信息及课程分数1.1、查询同时存在"01"课程和"02"课程的情况1.2、查询同时存在"01"课程和"02"课程的情况和存在"01"课程但可能不存在"02"课程的情况(不存在时显示为null)(以下存在相同内容时不再解释)2、查询"01"课程比"02"课程成绩低的学生的信息及课程分数2.1、查询同时存在"01"课程和"02"课程的情况2.2、查询同时存在"01"课程和"02"课程的情况和不存在"01"课程但存在"02"

weixin_38640052的博客 1862

MySQL经典50道练习题及全网最详细解析

1.学表Student(SId,Sname,Sage,Ssex)SId学编号Sname学姓名Sage出年Ssex学性别2.课程表Course(CId,Cname,TId)CId课程编号Cname课程名称TId教师编号3.教师表Teacher(TId,Tname)TId教师编号Tname教师姓名4.成绩表SC(SId,CId,score)SId学编号CId课程编号score分数。...

m0_67392182的博客 1万+

MySQL经典练习50题

Server version: 8.0.15 MySQL 练习数据 表1:course(cid[课程id],cname[课程名称],tid[教师id])-- 课程信息表 表2:sc(sid[学生id],cid[课程id],score[课程分数])-- 成绩表 表3:student(sid[学生id],sname[学生姓名],sage[学生年龄],ssex[学生性别])学生信息表 表4:teacher(tid[老师id],tname[老师姓名])-- 老师信息表 数据准备 以下数据准备也可直接复

Luo_Ra的博客 452
上一篇: Oracle-Select练习
下一篇: Centos7-Xmanager测试
BrantTang
博客等级 码龄5年 3粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值