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

七、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.mzph.cn/diannao/44078.shtml

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

相关文章

前端面试题33(实时消息传输)

前端实时传输协议主要用于实现实时数据交换&#xff0c;特别是在Web应用中&#xff0c;它们让开发者能够构建具有实时功能的应用&#xff0c;如聊天、在线协作、游戏等。以下是几种常见的前端实时传输协议的讲解&#xff1a; 1. Short Polling (短轮询) 原理&#xff1a;客户…

【1】A-Frame整体介绍

1.A-Frame是什么&#xff1f; A-Frame 是一个用于构建虚拟现实 (VR) 体验的 Web 框架。 A-Frame 基于 HTML 之上&#xff0c;因此上手简单。但 A-Frame 不仅仅是 3D 场景图或标记语言&#xff1b;它还是一种标记语言。其核心是一个强大的实体组件框架&#xff0c;为 Three.js …

Golang | Leetcode Golang题解之第226题翻转二叉树

题目&#xff1a; 题解&#xff1a; func invertTree(root *TreeNode) *TreeNode {if root nil {return nil}left : invertTree(root.Left)right : invertTree(root.Right)root.Left rightroot.Right leftreturn root }

uniapp+vue3嵌入Markdown格式

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

UML 2.5图的分类

新书速览|《UML 2.5基础、建模与设计实践》新书速览|《UML 2.5基础、建模与设计实践 UML 2.5在UML 2.4.1的基础上进行了结构性的调整&#xff0c;简化和重新组织了 UML规范文档。UML规范被重新编写&#xff0c;使其“更易于阅读”&#xff0c;并且“尽可能减少前向引用”。 U…

LLM应用构建前的非结构化数据处理(三)文档表格的提取

1.学习内容 本节次学习内容来自于吴恩达老师的Preprocessing Unstructured Data for LLM Applications课程&#xff0c;因涉及到非结构化数据的相关处理&#xff0c;遂做学习整理。 本节主要学习pdf中的表格数据处理 2.环境准备 和之前一样&#xff0c;可以参考LLM应用构建前…

金蝶部署常见问题解决

金蝶部署常见问题解决 金蝶版本&#xff1a; Apusic Application Server Enterprise Edition 9.0 SP8 kbc build 202312041121 报错信息&#xff1a; 与金蝶官方人员沟通&#xff0c;发现lib包版本太低&#xff0c;升级后可正常使用。替换lib包后重启服务。 下载lib: 链接: …

西瓜杯CTF(1)

#下班之前写了两个题&#xff0c;后面继续发 Codeinject <?php#Author: h1xaerror_reporting(0); show_source(__FILE__);eval("var_dump((Object)$_POST[1]);"); payload 闭合后面的括号来拼接 POST / HTTP/1.1 Host: 1dc86f1a-cccc-4298-955d-e9179f026d54…

公司内部配置GitLab,通过SSH密钥来实现免密clone、push等操作

公司内部配置GitLab&#xff0c;通过SSH密钥来实现免密clone、push等操作。以下是配置SSH密钥以实现免密更新的步骤&#xff1a; 1.生成SSH密钥 在本地计算机上打开终端或命令提示符。输入以下命令以生成一个新的SSH密钥&#xff1a;ssh-keygen -t rsa -b 4096 -C "your…

VBA实现Excel数据排序功能

前言 本节会介绍使用VBA如何实现Excel工作表中数据的排序功能。 本节会通过下表数据内容为例进行实操&#xff1a; 1. Sort 单列排序 语法&#xff1a;Sort key1,Order1 说明&#xff1a; Key1&#xff1a;表示需要按照哪列进行排序 Order1&#xff1a;用来指定是升序xlAsce…

D2D用户的功率优化算法研究

D2D通信技术是指两个对等的用户节点之间直接进行通信的一种通信方式。在由D2D通信用户组成的分布式网络中&#xff0c;每个用户节点都能发送和接收信号&#xff0c;并具有自动路由(转发消息)的功能。网络的参与者共享它们所拥有的一部分硬件资源&#xff0c;包括信息处理、存储…

短视频矩阵搭建,用云微客获客更方便

你的同行都爆单了&#xff0c;你还在问什么是矩阵&#xff1f;让我来告诉你。短视频矩阵是短视频获客的一种全新玩法&#xff0c;是以品牌宣传、产品推广为核心的一个高端布局手段&#xff0c;也是非常省钱的一种方式。 1.0时代&#xff0c;一部手机一个账号&#xff1b;2.0时代…

GD 32中断系统实现

1.0 中断的概念 中断&#xff1a;简单来说就是打断的意思&#xff0c;在计算机系统中CPU在执行一个操作的时候&#xff0c;有一个比当前任务更为紧急的任务需要执行,cpu暂停当前任务转而去执行更为紧急任务的操作&#xff0c;执行完更为紧急任务之后再返回来执行原来未执行完的…

高铁站客运枢纽IPTV电视系统-盐城高铁站西广场IP电视系统应用浅析

高铁站客运枢纽IPTV电视系统-盐城高铁站西广场IP电视系统应用浅析 由北京海特伟业科技有限公司任洪卓于2024年7月9日发布 随着科技的飞速发展&#xff0c;特别是“互联网”战略的深入推进&#xff0c;高铁站客运枢纽的信息化建设成为提升服务质量、增强乘客体验的重要手段。盐…

【1.3】动态规划-解码方法

一、题目 一条包含字母A-Z的消息通过以下映射进行了编码&#xff1a; A -> 1 B -> 2 ... Z -> 26 要解码已编码的消息&#xff0c;所有数字必须基于上述映射的方法&#xff0c;反向映射回字母&…

新能源汽车充电站远程监控系统S275钡铼技术无线RTU

新能源汽车充电站的远程监控系统在现代城市基础设施中扮演着至关重要的角色&#xff0c;而钡铼技术的S275无线RTU作为一款先进的物联网数据监测采集控制短信报警终端&#xff0c;为充电站的安全运行和高效管理提供了强大的技术支持。 技术特点和功能 钡铼S275采用了基于UCOSI…

Android11 窗口动画

窗口进入动画 应用端窗口绘制完成之后&#xff0c;调用finshDraw告知WMS&#xff0c;WMS这边最后就会调用WindowSurfacePlacer的performSurfacePlacement方法&#xff0c;最终调用到 WindowStateAnimator的commitFinishDrawingLocked方法 //frameworks/base/services/core/jav…

OJhelper一款帮助你获取各大oj信息的软件

项目地址 应用功能 目前应用支持&#xff1a;查询、自定义、收藏各大oj比赛信息&#xff0c;跳转比赛界面。查询各大oj的Rating分以及题量&#xff0c;查看题量饼状图。 应用环境 windows和安卓端 应用预览&#xff1a; 维护概况 后期会提供持续更新&#xff0c;具体可以…

7.9数据结构

思维导图 作业 doubleloop.h #ifndef __DOUBLELOOP_H__ #define __DOUBLELOOP_H__#include <stdio.h> #include <stdlib.h>typedef int datatype; typedef struct node {union{int len;datatype data;};struct node *pri;//前驱指针struct node *next;//后继指针…

全终端自动化测试框架wyTest

突然有一些觉悟&#xff0c;程序猿不能只会吭哧吭哧的低头做事&#xff0c;应该学会怎么去展示自己&#xff0c;怎么去宣传自己&#xff0c;怎么把自己想做的事表述清楚。 于是&#xff0c;这两天一直在整理自己的作品&#xff0c;也为接下来的找工作多做点准备。接下来…