• MySQL基础之练习题


    题目

    现有班级、学生以及成绩三张表:

    备注:表名称和字段名称可以参考表格内单词设置

    根据表格信息,按要求完成下面SQL语句的编写:

    1、使用SQL分别创建班级表、学生表以及成绩表的表结构,表内数据可以一条一条的插入也可以批量插入

    2、查询每个班级中每一科的平均成绩,显示数据包括班级名称,课程以及平均分数,并按照班ID升序排列

    3、查询所有同学的学生ID,姓名,性别以及总分,并按照成绩从高到低排序

    4、查询课程成绩小于75分的学生ID,姓名,班级,课程以及分数

    5、将李米米的数学成绩修改为88分

    6、计算重点班中每一科的平均成绩,显示数据包括:重点班级ID,班级名称,课程,平均分数,按照降序排列

    解答

    create database if not exists mooc default character set 'utf8';
    use mooc;
    
    --班级表
    create table if not exists class(
    	c_id int(3) unsigned zerofill auto_increment key comment '编号',
    	name varchar(20) not null comment '班级',
    	descrip varchar(20) not null comment '备注'
    )engine=innodb charset=utf8;
    
    --插入班级数据
    insert class(name,descrip) 
    values('一年级一班','重点班'),
    ('一年级二班','重点班'),
    ('二年级一班','重点班'),
    ('二年级二班','普通班');
    
    
    --学生表
    create table if not exists student(
    	s_id int unsigned auto_increment key comment '编号',
    	name varchar(20) not null comment '姓名',
    	gender varchar(5) not null comment '性别',
    	class int(3) unsigned zerofill not null comment '班级'
    )engine=innodb charset=utf8;
    alter table student auto_increment=1001; --修改主键初始值
    
    --插入学生数据
    insert student(name,gender,class) 
    values('赵晓明','男','001'),
    ('王晓红','女','001'),
    ('张晓晓','女','001'),
    ('孙琪琪','女','003'),
    ('李米米','女','004'),
    ('赵晓刚','男','003'),
    ('张大宝','男','002'),
    ('张兰','女','004'),
    ('孙好','男','001');
    
    
    --成绩表
    create table if not exists score(
    	sc_id int(3) unsigned zerofill auto_increment key comment '编号',
    	s_id int unsigned not null comment '学生ID',
    	course varchar(10) not null comment '课程',
    	mark int unsigned not null comment '分数'
    )engine=innodb charset=utf8;
    
    --插入成绩数据
    insert score(s_id,course,mark)
    values(1001,'数学',98),
    (1001,'语文',90),
    (1001,'英语',97),
    (1002,'数学',96),
    (1002,'语文',88),
    (1003,'语文',88),
    (1002,'英语',91),
    (1003,'数学',96),
    (1003,'英语',86),
    (1004,'数学',89),
    (1004,'语文',82),
    (1004,'英语',83),
    (1005,'数学',75),
    (1005,'语文',86),
    (1005,'英语',77),
    (1006,'数学',81),
    (1006,'语文',77),
    (1006,'英语',60),
    (1007,'数学',89),
    (1007,'语文',56),
    (1007,'英语',70),
    (1008,'数学',87),
    (1008,'语文',55),
    (1008,'英语',66),
    (1009,'数学',78),
    (1009,'语文',60),
    (1009,'英语',52);
    
    
    --添加外键约束
    alter table student add foreign key(class) references class(c_id);
    alter table score add foreign key(s_id) references student(s_id);
    
    --查询每个班级中每一科的平均成绩,显示数据包括班级名称,
    --课程以及平均分数,并按照班ID升序排列
    select c.name as 班级名称,sc.course as 课程,avg(mark) as 平均分
    from class as c
    inner join student as st
    on c.c_id = st.class
    inner join score as sc
    on st.s_id = sc.s_id
    group by 班级名称,课程
    order by 班级名称;
    +------------+------+---------+
    | 班级名称   | 课程 | 平均分  |
    +------------+------+---------+
    | 一年级一班 | 数学 | 92.0000 |
    | 一年级一班 | 英语 | 81.5000 |
    | 一年级一班 | 语文 | 81.5000 |
    | 一年级二班 | 数学 | 89.0000 |
    | 一年级二班 | 英语 | 70.0000 |
    | 一年级二班 | 语文 | 56.0000 |
    | 二年级一班 | 数学 | 85.0000 |
    | 二年级一班 | 英语 | 71.5000 |
    | 二年级一班 | 语文 | 79.5000 |
    | 二年级二班 | 数学 | 81.0000 |
    | 二年级二班 | 英语 | 71.5000 |
    | 二年级二班 | 语文 | 70.5000 |
    +------------+------+---------+
    
    --查询所有同学的学生ID,姓名,
    --性别以及总分,并按照成绩从高到低排序
    select st.s_id as 学生ID,st.name as 姓名,st.gender as 性别,sum(mark) as 总分
    from student as st
    inner join score as sc
    on st.s_id = sc.s_id
    group by 学生ID
    order by 总分 desc;
    +--------+--------+------+------+
    | 学生ID | 姓名   | 性别 | 总分 |
    +--------+--------+------+------+
    |   1001 | 赵晓明 | 男   |  285 |
    |   1002 | 王晓红 | 女   |  275 |
    |   1003 | 张晓晓 | 女   |  270 |
    |   1004 | 孙琪琪 | 女   |  254 |
    |   1005 | 李米米 | 女   |  238 |
    |   1006 | 赵晓刚 | 男   |  218 |
    |   1007 | 张大宝 | 男   |  215 |
    |   1008 | 张兰   | 女   |  208 |
    |   1009 | 孙好   | 男   |  190 |
    +--------+--------+------+------+
    
    --查询课程成绩小于75分的学生ID,姓名,班级,课程以及分数
    select st.s_id as 学生ID,st.name as 姓名,st.class as 班级,sc.course as 课程,sc.mark as 分数
    from student as st
    inner join class as c
    on c.c_id = st.class
    inner join score as sc
    on sc.s_id = st.s_id
    where sc.mark < 75;
    +--------+--------+------+------+------+
    | 学生ID | 姓名   | 班级 | 课程 | 分数 |
    +--------+--------+------+------+------+
    |   1009 | 孙好   |  001 | 语文 |   60 |
    |   1009 | 孙好   |  001 | 英语 |   52 |
    |   1007 | 张大宝 |  002 | 语文 |   56 |
    |   1007 | 张大宝 |  002 | 英语 |   70 |
    |   1006 | 赵晓刚 |  003 | 英语 |   60 |
    |   1008 | 张兰   |  004 | 语文 |   55 |
    |   1008 | 张兰   |  004 | 英语 |   66 |
    +--------+--------+------+------+------+
    
    --将李米米的数学成绩修改为88分
    update score set mark = 88 where s_id = 
    (select s_id from student where name = '李米米')
    and course = '数学';
    
    --计算重点班中每一科的平均成绩,显示数据包括:
    --重点班级ID,班级名称,课程,平均分数,按照降序排列
    select c.c_id as 重点班级ID,c.name as 班级名称,sc.course as 课程,avg(mark) as 平均分
    from class as c
    inner join student as st
    on c.c_id = st.class
    inner join score as sc
    on st.s_id = sc.s_id
    where c.descrip = '重点班'
    group by 班级名称,课程;
    +------------+------------+------+---------+
    | 重点班级ID | 班级名称   | 课程 | 平均分  |
    +------------+------------+------+---------+
    |        001 | 一年级一班 | 数学 | 92.0000 |
    |        001 | 一年级一班 | 语文 | 81.5000 |
    |        001 | 一年级一班 | 英语 | 81.5000 |
    |        002 | 一年级二班 | 数学 | 89.0000 |
    |        002 | 一年级二班 | 语文 | 56.0000 |
    |        002 | 一年级二班 | 英语 | 70.0000 |
    |        003 | 二年级一班 | 数学 | 85.0000 |
    |        003 | 二年级一班 | 语文 | 79.5000 |
    |        003 | 二年级一班 | 英语 | 71.5000 |
    +------------+------------+------+---------+
    
  • 相关阅读:
    串学习笔记
    C深度剖析学习笔记
    记英语单词ag
    树学习笔记
    如何做好项目总结
    易学队第二次团队会议
    易学队第四次团队会议
    易学队第五次团队会议
    易学队第一次团队会议
    易学队第三次团队会议
  • 原文地址:https://www.cnblogs.com/firebet/p/14153106.html
Copyright © 2020-2023  润新知