Mysql练习题目【7月10日更新】

news2024/12/25 2:05:28

七、Mysql练习题目

https://zhuanlan.zhihu.com/p/38354000

1. 创建表

创建学生表
mysql> create table if not exists student(
    -> student_id varchar(255) not null,
    -> student_name varchar(255) not null,
    -> birthday date not null,
    -> gender varchar(255) not null,
    -> primary key(student_id)
    -> )default charset utf8;
创建成绩表
mysql> create table score(
  	-> student_id varchar(255) not null,
  	-> course_id varchar(255) not null,
  	-> score float(3) not null,
  	-> primary key(student_id,course_id)
		-> )default charset utf8;
创建课程表
mysql> create table course(
    -> course_id varchar(255) not null,
    -> course_name varchar(255) not null,
    -> teacher_id varchar(255) not null,
    -> primary key(course_id)
    -> )default charset utf8;
创建教师表
mysql> create table teacher(
  	-> teacher_id varchar(255) not null, 
  	-> teacher_name varchar(255) null, 
  	-> primary key(teacher_id) 
		-> ) default charset utf8;

2. 插入数据

学生表插入数据
insert into student
values
('0001','猴子','1989-01-01','男'),
('0002','猴子','1990-12-21','女'),
('0003','马云','1991-12-21','男'),
('0004','王思聪','1990-05-20','男');
成绩表插入数据
insert into score
values
('0001','0001',80),
('0001','0002',90),
('0001','0003',99),
('0002','0002',60),
('0002','0003',80),
('0003','0001',80),
('0003','0002',80),
('0003','0003',80);
课程表插入数据
insert into course
values
('0001','语文','0002'),
('0002','数学','0001'),
('0003','英语','0003');
教师表插入数据
insert into teacher 
values
('0001','孟扎扎'),
('0002','马化腾'),
('0003',null),
('0004','');

3. 题目

1.查询姓“猴”的学生名单
select * from student where student_name like "猴%";
2.查询名字中最后一个字是猴的学生名单
select * from student where student_name like "%猴";
3.查询名字中带猴的学生名单
select * from student where student_name like "%猴%";
4.查询名字中第二个字是猴的学生名单
select * from student where student_name like "_猴%";
5.查询姓“孟”老师的个数

关键字:个数-count

select count(*) from teacher where teacher_name like "孟%";
6.查询课程编号为“0002”的总成绩

关键字:总成绩-sum

select sum(score) from score where course_id='0002';
7.查询选了课程的学生人数*

关键字:人数-count

select 学号,成绩表里学号有重复值需要去掉

select count(distinct student_id) as 学生人数 from score;
8.查询各科成绩最高和最低的分

关键字:各科-分组;最高分-max ;最低分-min

select course_id,min(score) as 最低分,max(score) as 最高分 from score group by course_id;
9.查询每门课程被选修的学生数

关键字:每门-分组;学生数-count

select course_id as 课程,count(student_id) as 学生个数 from score group by course_id;
10.查询男生、女生人数

关键字:男生、女生(相当于每,因为性别只有男、女)-分组;人数-count

select gender,count(*) from student group by gender;
11.查询平均成绩大于60分学生的学号和平均成绩

关键字:平均成绩大于-having avg()>

select student_id,avg(score) from score group by student_id having avg(score)>60;
12.查询至少选修两门课程的学生学号

关键字:至少-count

select student_id from score group by student_id having count(course_id)>=2;
13.查询同名同姓学生名单并统计同名人数*

关键字:人数-count

select student_name,count(student_id) from student group by student_name having count(student_id) >=2; 
14.查询不及格的课程并按课程号从大到小排列
select * from score where score<60 order by course_id desc;
15.查询每门课程的平均成绩,结果按平均成绩升序排序,平均成绩相同时,按课程号降序排列

关键字:每门-group by;平均成绩-avg

select course_id,avg(score) as 平均成绩 from score group by course_id order by 平均成绩,course_id desc;
16.检索课程编号为“0004”且分数小于60的学生学号,结果按按分数降序排列
select student_id student from score where course_id='0004' and score<60 order by score desc;
17.统计每门课程的学生选修人数(超过2人的课程才统计)

关键字:每门-group by;人数-count

select course_id,count(student_id) from score group by course_id having count(student_id)>2;
18.查询两门以上不及格课程的同学的学号及其平均成绩*

19.查询每个学生的总成绩并进行排名

关键字:每个-group by;总成绩-sum

select student_id,sum(score) as 总成绩 from score group by student_id order by 总成绩;
20.查询平均成绩大于60分的学生的学号和平均成绩

关键字:平均成绩大于-having avg()>60

select student_id,avg(score) as 平均成绩 from score group by student_id having avg(score)>60;
21.查询所有课程成绩小于60分学生的学号、姓名

关键字:所有成绩小于60-where score < 60

因为姓名在student表中,成绩在score表中,所以要用到子查询。

注意:如果(值1,值2,……)存在重复值时,in (值1,值2,……) 会从(值1,值2,……)中的重复值中选择一个。即in会过滤掉重复数据

select student_id,student_name from student where student_id in (select student_id from score where score<60);
22.查询没有学全所有课的学生的学号、姓名*
select student_id,student_name from student where student_id in (select student_id from score group by student_id having count(course_id) < (select count(*) from course));
23.查询出只选修了两门课程的全部学生的学号和姓名
select student_id,student_name from student where student_id in (select student_id from score group by student_id having count(course_id)=2);
24.查询各科成绩前两名的记录*

关键字:各科-group by


https://mp.weixin.qq.com/s/MuxjlFV0gi1GydOrYfiSeQ

img
25.查找1990年出生的学生名单*
select * from student where year(birthday) = 1990;select * from student where birthday like '1990-%';
26.查询各学生的年龄(精确到年)*
select student_id, year(current_time)-year(birthday)+1 from student;
27.查询各学生的年龄(精确到月份)*
select student_id,timestampdiff(month ,birthday ,now())/12 from student;
28.查询本月过生日的学生*
select * from student where month(birthday)=month(current_date);
29.查询所有学生的学号、姓名、选课数、总成绩*

要显示的列:学号,姓名,选课数,总成绩,分布在两个表中,所以应该用连表查询,将两个表连接起来

关键字:所有学生-左连接或右连接:左连接的话join左边的表应该为student,右连接的话join右边应该为student表。

注意:分组时,如果要用外连接的条件分组,则选择的那个表中的列中的数据应该是唯一的,及s.student_id

select s.student_id as 学号,s.student_name as 姓名,count(c.course_id) as 选课数,sum(c.score) as 总成绩 from student as s left join score as c on s.student_id=c.student_id group by s.student_id;
30.查询平均成绩大于85的所有学生的学号、姓名和平均成绩*
select t1.student_id as '学号',t1.student_name as '姓名',avg(score) as '平均成绩' from student as t1 left join score as t2 on t1.student_id = t2.student_id group by  t1.student_id having avg(t2.score)>85;
31.查询学生的选课情况:学号,姓名,课程号,课程名称*
select t1.student_id,t1.student_name,t3.course_id,t3.course_name from student as t1 left join score as t2 on t1.student_id=t2.student_id left join course as t3 on t2.course_id=t3.course_id;
32.查询出每门课程的及格人数和不及格人数*

关键字:及格和不及格-分类:case语句

select course_id, sum(case when score>=60 then 1 else 0 end) as 及格人数, sum(case when score<60 then 1 else 0 end) as 不及格人数 from score group by course_id;
33.使用分段[100-85],[85-70],[70-60],[<60]来统计各科成绩,分别统计:各分数段人数,课程号和课程名称
select a.课程号,b.课程名称,
sum(case when 成绩 between 85 and 100 
	 then 1 else 0 end) as '[100-85]',
sum(case when 成绩 >=70 and 成绩<85 
	 then 1 else 0 end) as '[85-70]',
sum(case when 成绩>=60 and 成绩<70  
	 then 1 else 0 end) as '[70-60]',
sum(case when 成绩<60 then 1 else 0 end) as '[<60]'
from score as a right join course as b 
on a.课程号=b.课程号
group by a.课程号,b.课程名称;
34.查询课程编号为0003且课程成绩在80分以上的学生的学号和姓名
select student_id,student_name from student where student_id in (select student_id from score where course_id='0003' and score>80);
35.检索"0001"课程分数小于60,按分数降序排列的学生信息
select t1.*,t2.score from student as t1 left join score as t2 on t1.student_id=t2.student_id where t2.course_id = 0001 and t2.score>60 order by t2.score desc;
36.查询不同老师所教不同课程平均分从高到低显示**

注意:select只能是聚合函数或group by后面的字段,否则会报SELECT list is not in GROUP BY clause and contains nonaggregated column的错误。原因是sql_mode模式的限制。可以修改这个模式,修改方法:https://blog.csdn.net/weixin_42085125/article/details/115335503

因为我们要查询t2.course_id,所以要在group by后面加上t2.course_id

select t1.teacher_name,t2.course_id,avg(t3.score) from teacher as t1 inner join course as t2 on t1.teacher_id=t2.teacher_id inner join score as t3 on t2.course_id=t3.course_id group by t1.teacher_id,t2.course_id order by avg(score) desc; 
37.查询课程名称为"数学",且分数低于60的学生姓名和分数
行列如何互换

sql面试题:行列如何互换?

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

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

相关文章

思考:Java内存模型和硬件内存模型

前言 前一阵在看volatile的原理&#xff0c;看到内存屏障和缓存一致性&#xff0c;发现再往底层挖就挖到了硬件和Java内存模型。这一块是自己似懂非懂的知识区&#xff0c;我一般称之为知识混沌区。因此整理这一篇文章。 什么是内存模型&#xff08;Memory Model&#xff09;…

46、lvs集群- 博客

1、lvs集群&#xff1a; lvs&#xff1a;linux virtual server----章文嵩发起的开源项目&#xff0c;阿里。linux的内核层面实现负载均衡的软件。 主要作用&#xff1a;将多个后端服务器组成一个高可用&#xff0c;高性能的服务器集群&#xff0c;通过负载均衡的算法将客户端的…

前端javascript中的排序算法之插入排序

插入排序&#xff08;Selection Sort&#xff09;基本思想&#xff1a; 插入排序每次排一个数组项&#xff0c;以此方式构建最后的排序数组。假定第一项已经排序了&#xff0c;接着&#xff0c; 它和第二项进行比较&#xff0c;第二项是应该待在原位还是插到第一项之前呢&#…

查看oracle ojdbc所支持的JDBC驱动版本

oracle jcbc驱动的下载地址参考&#xff1a;JDBC and UCP Downloads page 其实上文中对ojdbc所支持的JDBC驱动版本已经有说明了&#xff0c;不过&#xff0c;因为oracle的驱动包很多时间&#xff0c;都是在公司内部私服里上传维护的&#xff0c;上传的时候&#xff0c;可能又没…

第4章 课程发布:模块需求分析,课程预览(模板引擎 静态页面),课程审核,课程发布(分布式事务,页面静态化:熔断降级),课程搜索(es索引)

1 模块需求分析 1.1 模块介绍 课程信息编辑完毕即可发布课程&#xff0c;发布课程相当于一个确认操作&#xff0c;课程发布后学习者在网站可以搜索到课程&#xff0c;然后查看课程的详细信息&#xff0c;进一步选课、支付、在线学习。 下边是课程编辑与发布的整体流程&#…

Java中的 this 关键字是什么意思? this() 又是什么?

目录 问题问题一&#xff1a;什么是this关键字?问题二&#xff1a;什么是this()&#xff1f; 问题 问题一&#xff1a;什么是this关键字? 定义&#xff1a;this 代表当前对象。这个定义比较抽象&#xff0c;举例来回答。 思考一个问题&#xff1a;如果没有 this 会怎样&…

uniapp+vue3嵌入Markdown格式

使用的库是towxml 第一步&#xff1a;下载源文件&#xff0c;那么可以git clone&#xff0c;也可以直接下载压缩包 git clone https://github.com/sbfkcel/towxml.git 第二步&#xff1a;设置文件夹内的config.js&#xff0c;可以选择自己需要的格式 第三步&#xff1a;安装…

【国潮】软件本土化探索

文章目录 一、国产-操作系统银河麒麟&#xff08;Kylin&#xff09;操作系统华为鸿蒙系统&#xff08;HarmonyOS&#xff09;统信UOS深度Deepin 二、国产-服务器华为鲲鹏&#xff1a;飞腾&#xff1a;海光&#xff1a;兆芯&#xff1a;龙芯&#xff1a;申威&#xff1a; 三、国…

2024-07抖音/快手/小红书/视频号/美团无人直播技术:最新不封号无人直播的操作方法详细介绍

2024年最新研究出来的无人直播技术&#xff0c;目前不封号&#xff0c;用途大大的&#xff0c;可带货&#xff0c;可引流&#xff0c;可获客。 手机自动直播源码通常涉及到实时流媒体技术和应用开发&#xff0c;它涉及以下几个关键部分&#xff1a; 摄像头接入&#xff1a;使用…

neo4j 图数据库:Cypher 查询语言、医学知识图谱

neo4j 图数据库&#xff1a;Cypher 查询语言、医学知识图谱 Cypher 查询语言创建数据查询数据查询并返回所有节点查询并返回所有带有特定标签的节点查询特定属性的节点及其所有关系和关系的另一端节点查询从名为“小明”的节点到名为“小红”的节点的路径 更新数据更新一个节点…

基于jeecgboot-vue3的Flowable流程-集成仿钉钉流程(四)支持json和xml的显示

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、相应的界面前端代码 <template><div class"formDesign"><FlowDesign :process"process" :fields"fields" :readOnly"readOnly&quo…

微信小程序毕业设计-教育培训系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

【机器学习】使用决策树分类器预测汽车安全性的研究与分析

文章目录 一、决策树算法简介决策树的结构分类和回归树 (CART)决策树算法术语决策树算法直觉 二、属性选择度量信息增益熵 基尼指数计算分割基尼指数的步骤 三、决策树算法中的过度拟合避免过度拟合的方法 四、导入库和数据可视化探索性数据分析重命名列名查看数据集的总结信息…

double和float的区别与使用

double和float类型的区别与使用 在Java中&#xff0c;double和float都是基本数据类型&#xff0c;用于表示浮点数&#xff08;即带有小数点的数&#xff09;。 它们在精度和范围上有所不同&#xff1a; double类型提供了更高的精度和更大的范围&#xff0c;而float类型则精度更…

类似评论、省市区这种具有层次结构的数据表怎么设计?

业务功能模块 评论、回复模块省市区表 设置一个给每个数据设置一个parent_id 例如&#xff1a; 某个视频下a写了条评论&#xff0c;那a的parent_id就是0;b回复了a&#xff0c;那b的parent_id就是a的id;c回复了b&#xff0c;那c的parent_id就是b的id; 这样&#xff0c;所有评论…

MATLAB备赛资源库(1)建模指令

一、介绍 MATLAB&#xff08;Matrix Laboratory&#xff09;是一种强大的数值计算环境和编程语言&#xff0c;特别设计用于科学计算、数据分析和工程应用。 二、使用 数学建模使用MATLAB通常涉及以下几个方面&#xff1a; 1. **数据处理与预处理**&#xff1a; - 导入和处理…

LeetCode加油站(贪心算法/暴力,分析其时间和空间复杂度)

题目描述 一.原本暴力算法 最初的想法是&#xff1a;先比较gas数组和cost数组的大小&#xff0c;找到可以作为起始点的站点(因为如果你起始点的油还不能到达下一个站点&#xff0c;就不能作为起始点)。当找到过后&#xff0c;再去依次顺序跑一圈&#xff0c;如果剩余的油为负数…

java使用poi-tl模版引擎导出word之if判断条件的使用

文章目录 模版中if语句条件的使用1.数据为False或空集合2.非False或非空集合 模版中if语句条件的使用 如果区块对的值是 null 、false 或者空的集合&#xff0c;位于区块中的所有文档元素将不会显示&#xff0c;这就等同于if语句的条件为 false。语法示例&#xff1a;{{?stat…

FUSE(用户空间文件系统)命令参数

GPT-4 (OpenAI) FUSE (Filesystem in Userspace)是一个允许创建用户空间文件系统的接口。它提供了一个API&#xff0c;让开发者在未修改内核代码的情况下&#xff0c;通过自己的程序实现文件系统。FUSE 文件系统通常通过 mount 命令来挂载&#xff0c;而且这个命令可以接受各…

【福利】代码公开!咸鱼之王自动答题脚本

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 微信或QQ打开咸鱼之王小程序&#xff0c;进入答题界面&#xff0c;运行main.py。期间不要动鼠标。 可自行更改代码来适配自己的需求~ 可以按照示例图片…