标签搜索

MySql的综合练习

幻鹤
2022-04-29 / 0 评论 / 982 阅读 / 正在检测是否收录...

先来看配置
一、 创建数据库XSCJ

Create database XSCJ;

二、 打开数据库XSCJ

Use XSCJ;

三、创建学生表student

Create table student (
学号 char(6) not null primary key,
姓名 char(8) not null,
专业名 char(10) null,
性别 tinyint(1) not null,
出生时间 date null,
总学分 tinyint(1) null,
照片 blob null,
备注 text null
);

四、创建课程表class

Create table class(
课程号 char(3) not null primary key,
课程名 char(16) not null,
开课学期 tinyint(1) null,
学时 tinyint(1) not null,
学分 tinyint(1) null
);

五、创建成绩表score

Create table score(
学号 char(6) not null,
课程号 char(3) not null,
成绩 tinyint(1) null,
学分 tinyint(1) null,
primary key(学号,课程号)
);

六、向student表中插入数据

insert into student values
('081101','王林','计算机',1,'1990-02-10',50,'',NULL),
('081102','程明','计算机',1,'1991-02-01',50,'',NULL),
('081103','王燕','计算机',0,'1989-10-06',50,'',NULL),
('081104','韦严平','计算机',1,'1990-08-26',50,'',NULL),
('081106','李方方','计算机',1,'1990-11-20',50,'',NULL),
('081107','李明','计算机',1,'1990-05-01',54,'','提前修完《数据结构》'),
('081108','林一帆','计算机',1,'1989-08-05',52,'','已提前修完一门课'),
('081109','张强民','计算机',1,'1989-08-11',50,'',NULL),
('081110','张蔚','计算机',0,'1991-07-22',50,'','三好生'),
('081111','赵琳','计算机',0,'1990-03-18',50,'',NULL),
('081113','严红','计算机',0,'1989-08-11',48,'','有一门功课不及格,待补考'),
('081201','王敏','通信工程',1,'1989-06-10',42,'',NULL),
('081202','王林','通信工程',1,'1989-01-29',40,'','有一门功课不及格,待补考');

七、向class表中插入数据

insert into class values
('101','计算机基础',1,80,5),
('102','程序设计与语言',2,68,4),
('206','离散数学',4,68,4),
('208','数据结构',5,68,4),
('209','操作系统',6,68,4),
('210','计算机原理',5,85,5),
('212','数据库原理',7,68,4),
('301','计算机网络',7,51,3),
('302','软件工程',7,51,3);

八、向score表中插入数据

insert into score values
('081101','101',80,4),
('081101','102',78,4),
('081101','206',76,4),
('081102','102',78,4),
('081102','206',78,4),
('081103','101',62,4),
('081103','102',70,4),
('081103','206',81,4);

然后是题目
1 查询student表中各个同学的姓名、专业名和总学分

2 查询student表中计算机系同学的学号、姓名和总学分,结果中各列的标题分别指定为number、name和mark

3 查询student表中计算机系各同学的学号、姓名和总学分,对其总学分按以下规则进行替换:若总学分为空值,替换为“尚未选课”;若总学分小于50,替换为“不及格”;若总学分在50~52之间,替换为“合格”;若总学分大于52,替换为“优秀”。列标题更改为“等级”。

4显示score表中学号为081101的学生课程信息

5 对student表只选择专业名和总学分,消除结果集中的重复行

6 求学生的总人数

7 统计备注不为空的学生数目

8 统计student学生表中总学分在50分以下的人数

9 求选修101课程的学生的最高分和最低分

10 求学号081101的学生所学课程的总成绩

11 求选修101课程的学生的平均成绩

12 查询student表中学号为081101的学生的情况

13 查询student表中总学分大于50的学生的情况

14查询student表中备注为空的同学的情况

15 查询student表中专业为计算机,性别为女(0)的同学的情况

16 查询score表中102和206课程中大于80分的同学的记录

17 查询student表中姓“王”的学生学号、姓名和性别

18 查询student表中不在1989年出生的学生情况

19 查询student表中专业为“计算机”、“通信工程”的学生的情况

20 查找所有学生选过的课程名和课程号

21 查找选修了206课程且成绩在80分以上的学生姓名及成绩

22 查找选修了“计算机基础”课程且成绩在80分以上的学生学号、姓名、课程名及成绩

23 查找所有学生情况及他们选修的的课程号,若学生未选修任何课,也要包括其情况

24 查找被选修了课程为206课程的学生的姓名、学号

25 查找未选修离散数学的学生的姓名、学号和专业名(子查询)

26 查找选修了离散数学的学生学号

27 查找student表中比所有计算机系的学生年龄都大的学生的学号、姓名、专业名和出生日期

28 查找score表中课程号206的成绩不低于课程号101的最低成绩的学生的学号

29 查找选修了206课程的学生姓名

30 将student中各专业名输出

31求student中各专业的学生数

32 求被选修的各门课程的平均成绩和选修该课程的人数

33 在XSCJ数据库上产生一个结果集,包括各个专业的男生人数,女生人数,总人数及学生总人数(rollup)

34 查找平均成绩在85分以上的学生的学号和平均成绩

35 查找选修课程超过2门且成绩都在77分以上的学生的学号

36 将通信工程专业的学生按出生日期先后排序

37 将计算机专业学生的‘计算机基础’课程成绩按降序排列

38 将计算机专业学生按其平均成绩排列

39 查找student表中学号最靠前的5位学生的信息

40 查找student表中第4位同学开始的5位学生的信息

解答:
1:

select 姓名,专业名,总学分 from student;

2:

select 学号 as number,姓名 as name,总学分 as mark from student;

3:

select 学号,姓名,case
     when 总学分 is NULL then '尚未选课'
     when 总学分<50 then '不及格'
     when 总学分>=50 and 总学分<=52 then '合格'
     when 总学分>52 then '优秀'
end
 as 等级 from student;

4:

select * from score where 学号=081101;

5:

select distinct 专业名,总学分 from student;

6:

select count(学号) as 学生总人数 from student;

7:

select count(学号) as 人数 from student where 备注 is not null;

8:

select count(学号) as 人数 from student where 总学分<50;

9:

select max(成绩) as 最高分,min(成绩) as 最低分 from score where 课程号=101;

10:

select sum(成绩) as 总成绩 from score where 学号=081101;

11:

select avg(成绩) as 平均分 from score where 课程号=101;

12:

select * from student where 学号=081101;

13:

select * from student where 总学分>50;

14:

select * from student where 备注 is null;

15:

select * from student where 专业名='计算机' and 性别=0;

16:

select * from score where (课程号=102 or 课程号=206) and 成绩>80;

17:

select 学号,姓名,性别 from student where 姓名 like '王%';

18:

select * from student where year(出生时间)!=1989;

19:

select * from student where 专业名 in ('计算机','通信工程');

20:

select 课程名,score.课程号 from class,score where class.课程号=score.课程号;

21:

select 姓名,成绩 from student join score using(学号) where 课程号=206 and 成绩>80;

22:

select 学号,姓名,课程名,成绩 from score join student using(学号) join class using(课程号) where 课程名='计算机基础' and 成绩>80;

23:

select student.*,score.课程号 from student left outer join score using(学号);

24:

select distinct 姓名,学号 from student join score using(学号);

25:

select 姓名,学号,专业名 from student where 学号 in (select 学号 from score join student using(学号) join class using(课程号) where !课程名='离散数学');

26:


select distinct 学号 from student join score using(学号) where 课程号 in (select 课程号 from class where 课程名='离散数学');

27:

select min(出生时间) from student where 专业名='计算机';

select 学号,姓名,专业名,出生时间 from student where 出生时间 in (select min(出生时间) from student where 专业名='计算机');

28:

select min(成绩) from score where 课程号=101;
select 学号 from score where 课程号=206 and 成绩>(select min(成绩) from score where 课程号=101);

29:

select 姓名 from score join student using(学号) where 课程号=206;

30:

select distinct 专业名 from student;

31:

select 专业名,count(*) as 数量 from student group by 专业名;

32:

select 课程号,avg(成绩) as 平均成绩,count(学号) as 人数 from score group by 课程号;

33:

select 性别,count(学号) from student group by 性别 with rollup;

34:

select 学号,avg(成绩) as 平均成绩 from score having 平均成绩>85;

35:

select 学号 from score where 成绩>77 group by 学号 having count(学号)>2;

36:

select * from student where 专业名='通信工程专业' order by 出生时间;

37:

select student.*,成绩 from score join student using(学号) join class using(课程号) where 专业名='计算机' and 课程名='计算机基础' order by 成绩 desc;

38:

select student.*,avg(成绩) as 平均成绩 from student join score using(学号) where 专业名='计算机' group by score.学号 order by 平均成绩;

39:

select * from student order by 学号 limit 5;

40:

select * from student limit 4,5;
0

评论 (0)

取消