MySQL题目练习

1.创建表

# 创建数据库
create database mysql_exampleTest;
 use mysql_exampleTest;
 # 学生表
CREATE TABLE Student(
 s_id VARCHAR(20),
 s_name VARCHAR(20) NOT NULL DEFAULT '',
 s_birth VARCHAR(20) NOT NULL DEFAULT '',
 s_sex VARCHAR(10) NOT NULL DEFAULT '',
 PRIMARY KEY(s_id)
 );
 # 课程表
CREATE TABLE Course(
 c_id VARCHAR(20),
 c_name VARCHAR(20) NOT NULL DEFAULT '',
 t_id VARCHAR(20) NOT NULL,
 PRIMARY KEY(c_id)
 );
 # 教师表
CREATE TABLE Teacher(
 t_id VARCHAR(20),
 t_name VARCHAR(20) NOT NULL DEFAULT '',
 PRIMARY KEY(t_id)
 );
 # 成绩表
CREATE TABLE Score(
 s_id VARCHAR(20),
 c_id VARCHAR(20),
 s_Score INT(3),
 PRIMARY KEY(s_id,c_id)
 );

2.插入数据

# 插入学生表测试数据
insert into Student values('01' , '赵雷' , '1990-01-01' , '男');
 insert into Student values('02' , '钱电' , '1990-12-21' , '男');
 insert into Student values('03' , '孙风' , '1990-05-20' , '男');
 insert into Student values('04' , '李云' , '1990-08-06' , '男');
 insert into Student values('05' , '周梅' , '1991-12-01' , '女');
 insert into Student values('06' , '吴兰' , '1992-03-01' , '女');
 insert into Student values('07' , '郑竹' , '1989-07-01' , '女');
 insert into Student values('08' , '王菊' , '1990-01-20' , '女');
 # 课程表测试数据
insert into Course values('01' , '语文' , '02');
 insert into Course values('02' , '数学' , '01');
 insert into Course values('03' , '英语' , '03');
 # 教师表测试数据
insert into Teacher values('01' , '张三');
 insert into Teacher values('02' , '李四');
 insert into Teacher values('03' , '王五');
# 成绩表测试数据
insert into Score values('01' , '01' , 80);
 insert into Score values('01' , '02' , 90);
 insert into Score values('01' , '03' , 99);
 insert into Score values('02' , '01' , 70);
 insert into Score values('02' , '02' , 60);
 insert into Score values('02' , '03' , 80);
 insert into Score values('03' , '01' , 80);
 insert into Score values('03' , '02' , 80);
 insert into Score values('03' , '03' , 80);
 insert into Score values('04' , '01' , 50);
 insert into Score values('04' , '02' , 30);
 insert into Score values('04' , '03' , 20);
 insert into Score values('05' , '01' , 76);
 insert into Score values('05' , '02' , 87);
 insert into Score values('06' , '01' , 31);
 insert into Score values('06' , '03' , 34);
 insert into Score values('07' , '02' , 89);
 insert into Score values('07' , '03' , 98);

 mysql> select * from Student;
+------+--------+------------+-------+
| s_id | s_name | s_birth    | s_sex |
+------+--------+------------+-------+
| 01   | 赵雷   | 1990-01-01 | 男    |
| 02   | 钱电   | 1990-12-21 | 男    |
| 03   | 孙风   | 1990-05-20 | 男    |
| 04   | 李云   | 1990-08-06 | 男    |
| 05   | 周梅   | 1991-12-01 | 女    |
| 06   | 吴兰   | 1992-03-01 | 女    |
| 07   | 郑竹   | 1989-07-01 | 女    |
| 08   | 王菊   | 1990-01-20 | 女    |
+------+--------+------------+-------+
mysql> select * from Course;
+------+--------+------+
| c_id | c_name | t_id |
+------+--------+------+
| 01   | 语文   | 02   |
| 02   | 数学   | 01   |
| 03   | 英语   | 03   |
+------+--------+------+
mysql> select * from Score;
+------+------+---------+
| s_id | c_id | s_Score |
+------+------+---------+
| 01   | 01   |      80 |
| 01   | 02   |      90 |
| 01   | 03   |      99 |
| 02   | 01   |      70 |
| 02   | 02   |      60 |
| 02   | 03   |      80 |
| 03   | 01   |      80 |
| 03   | 02   |      80 |
| 03   | 03   |      80 |
| 04   | 01   |      50 |
| 04   | 02   |      30 |
| 04   | 03   |      20 |
| 05   | 01   |      76 |
| 05   | 02   |      87 |
| 06   | 01   |      31 |
| 06   | 03   |      34 |
| 07   | 02   |      89 |
| 07   | 03   |      98 |
+------+------+---------+
mysql> select * from Teacher;
+------+--------+
| t_id | t_name |
+------+--------+
| 01   | 张三   |
| 02   | 李四   |
| 03   | 王五   |
+------+--------+

 3.题目

# 1、查询"01"课程比"02"课程成绩高的学生的信息及课程分数

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

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

# 4、查询平均成绩小于60分的同学的学生编号和学生姓名和平均成绩(包括有成绩的和无 成绩的)

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

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

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

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

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

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

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

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

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

# 14、查询没学过"张三"老师讲授的任一门课程的学生姓名

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

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

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

# 18.查询各科成绩最高分、最低分和平均分: 以如下形式显示:课程ID,课程name,最高分,最低分,平均分

# 19、按各科成绩进行排序,并显示排名(实现不完全)

# 20、查询学生的总成绩并进行排名

# 21、查询不同老师所教不同课程平均分从高到低显示

# 22、查询所有课程的成绩第2名到第3名的学生信息及该课程成绩

# 23、统计各科成绩各分数段人数:课程编号,课程名称,[100-85],[85-70],[70-60],[60-0] 及所占百分比

# 24、查询学生平均成绩及其名次

# 25、查询各科成绩前三名的记录 4/5

# 26、查询每门课程被选修的学生数

# 27、查询出只有两门课程的全部学生的学号和姓名 # 28、查询男生、女生人数

# 29、查询名字中含有"风"字的学生信息

# 30、查询同名同性学生名单,并统计同名人数

# 31、查询1990年出生的学生名单 # 32、查询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编 号升序排列

# 33、查询平均成绩大于等于85的所有学生的学号、姓名和平均成绩

# 34、查询课程名称为"数学",且分数低于60的学生姓名和分数

# 35、查询所有学生的课程及分数情况;

# 36、查询任何一门课程成绩在70分以上的姓名、课程名称和分数

# 37、查询不及格的课程

# 38、查询课程编号为01且课程成绩在80分以上的学生的学号和姓名

# 39、求每门课程的学生人数

# 40、查询选修"张三"老师所授课程的学生中,成绩最高的学生信息及其成绩

# 41、查询不同课程成绩相同的学生的学生编号、课程编号、学生成绩

# 42、查询每门功成绩最好的前两名

# 43、统计每门课程的学生选修人数(超过5人的课程才统计)。 要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课 程号升序排列

# 44、检索至少选修两门课程的学生学号

# 45、查询选修了全部课程的学生信息

# 46、查询各学生的年龄(实岁)

 答案

1.select * from Student where Student.s_id in (select new.s_id from (select s_id,s_Score from Score where c_id=01)as new0 inner join (select s_id,s_Score from Score where c_id=02)as new on new0.s_id=new.s_id and
new0.s_Score > new.s_Score;core;)
2.select * from Student where Student.s_id in (select new.s_id from (select s_id,s_Score from Score where c_id=01)as new0 inner join (select s_id,s_Score from Score where c_id=02)as new on new0.s_id=new.s_id and
new0.s_Score < new.s_Score;core;)
3.select * from Student where Student.s_id in (select s_id from (select s_id,avg(S_Score)as func from Score group by s_id)as new where new.func >=60);
4.select * from Student where Student.s_id in (select s_id from (select s_id,avg(S_Score)as func from Score group by s_id)as new where new.func <60);
5.select Student.s_id,Student.s_name,sum(Score.s_Score),count(c_id) from Student inner join Score on Score.s_id=Student.s_id group by Student.s_id;
6.select count(t_name) from Teacher where t_name regexp "张";
7. select * from Student where Student.s_id in (select s_id from Score where c_id in (select c_id from Course inner join Teacher on Teacher.t_name="张三" and Teacher.t_id=Course.t_id));
8.select * from Student where Student.s_id not in (select s_id from Score where c_id in (select c_id from Course inner join Teacher on Teacher.t_name="张三" and Teacher.t_id=Course.t_id));
9. select * from Student where Student.s_id in (select s_id from Score where c_id not in (select c_id from Course inner join Teacher on Teacher.t_name="张三" and Teacher.t_id=Course.t_id));
10.selet * from Student where s_id in (select func.s_id from (select * from (select s_id from Score where c_id=01)as new left outer join (select s_id as target from Score where c_id=02)as new1 on new.s_id=new1.target)as func where func.target is null);
11.select * from Student where Student.s_id in (select s_id from (select s_id,count(s_id)as count from Score group by Score.s_id)as target where target.count <3;)
12.select * from Student where s_id in (select distinct s_id from (select s_id,c_id from Score)as new where new.c_id
in (select c_id from Score where s_id=01));
13.select * from Student where s_id in (select s_id from (select s_id,count(c_id)as func from Score group by s_id)as new where new.func =3);
14.select * from Student where Student.s_id not in (select s_id from Score where c_id in (select c_id from Course inner join Teacher on Teacher.t_name="张三" and Teacher.t_id=Course.t_id));
15.select * from Student where Student.s_id in (select s_id from (select s_id,count(s_id)as num from Score where s_Score<60 group by s_id)as new where new.num>=2);
16.select * from Student inner join ( select s_id,avg(s_Score)as item from Score where s_id in (select s_id from Score where c_id=01 and s_Score <60) group by s_id order by item desc;)as new on new.s_id = Student.s_id;
17.select * from Student inner join (select new0.*,new1.item from (select s_id,avg(s_Score)as item from Score group by s_id)as new0 inner join (select Score.s_id,Course.c_name,Score.s_Score from Course inner join Score on Course.c_id=Score.c_id)as new1 where new0.s_id=new1.s_id)as total on Student.s_id=total.s_id order by total.item desc;
18.select list1.c_name,list2.* from (select c_id,c_name from Course)as list1 inner join (select c_id,max(s_Score)as Max_,min(s_Score)as Min_,avg(s_Score)as Avg_ from Score group by c_id)as list2 on list1.c_id=list2.c_id;
19.select total.*,dense_rank() over(partition by total.c_name order by total.s_Score desc)as rank_ from (select demo.*,Student.s_name from (select Course.c_name,Score.s_id,Score.s_Score from Course left outer join Score on Course.c_id =Score.c_id)as demo inner join Student on demo.s_id=Student.s_id order by c_name,s_Score desc)as total;
20. select Student.s_name,new.total from Student inner join (select s_id,sum(s_Score)as total from Score group by s_id)as new on new.s_id=Student.s_id order by total desc;
21.select * from (select Teacher.*,Course.c_id from Teacher left outer join Course on Course.t_id=Teacher.t_id)as demo left outer join (select c_id,avg(s_Score)as Avg_ from Score group by c_id)as demo1 on demo.c_id=demo1.c_id order by Avg_ desc;
22.select * from (select total.*,dense_rank() over(partition by total.c_name order by total.s_Score desc)as rank_ from (select demo.*,Student.s_name from (select Course.c_name,Score.s_id,Score.s_Score from Course left outer join Score on Course.c_id =Score.c_id)as demo inner join Student on demo.s_id=Student.s_id order by c_name,s_Score desc)as total) where rank_ between 2 and 3;
24.select total.*,rank() over (order by total.Avg_ desc)as rank_ from ( select Student.s_name,new.Avg_ from Student inner join ( select s_id,avg(s_Score)as Avg_ from Score group by s_id)as new on new.s_id=Student.s_id)as total;
25.select fc.* from (select total.*,dense_rank() over(partition by total.c_name order by total.s_Score desc)as rank_ from (select demo.*,Student.s_name from (select Course.c_name,Score.s_id,Score.s_Score from Course left outer join Score on Course.c_id =Score.c_id)as demo inner join Student on demo.s_id=Student.s_id order by c_name,s_Score desc)as total)as fc where fc.rank_<=3;
26.select * from Course inner join (select c_id,count(s_id) from Score group by c_id)as total on total.c_id=Course.c_id;
27.select Student.* from Student inner join ( select new.s_id from (select s_id,count(c_id)as num from Score group by s_id)as new where num=2)as total on total.s_id=Student.s_id;
28.select s_sex,count(s_id)as number_of_gender from Student group by s_sex;
29.select * from Student where s_name regexp "风";
30.select new.* from (select Student.*,count(s_name)as same_name from Student group by s_id)as new where new.same_name >1;
31.select * from Student where s_birth regexp "1990";
32.select Course.c_name,Course.c_id,new.Avg_ from Course inner join (select c_id,avg(s_Score)as Avg_ from Score group by c_id)as new on new.c_id=Course.c_id order by Avg_ desc,c_id;
33.select Student.* from Student where Student.s_id in( select s_id from (select s_id,avg(s_Score)as Avg_ from Score group by s_id)as new where new.Avg_>85);
34.select Student.s_name,new.s_Score from Student inner join (select s_id,s_Score from Score where s_Score <60 and c_id in (select c_id from Course where c_name regexp
"数学"))as new on new.s_id=Student.s_id;
35.select Student.*,new.s_Score,new.c_name from Student left outer join (select Score.s_id,Score.s_Score,Course.c_name from Course inner join Score on Score.c_id = Cour
se.c_id) as new on new.s_id =Student.s_id;
36.select * from (select Student.*,new.s_Score,new.c_name from Student left outer join (select Score.s_id, Score.s_Score, Course.c_name from Course inner join Score on Score.c_id = Course.c_id) as new on new.s_id =Student.s_id)as target where target.s_Score >70;
37.select Student.s_name,target.c_name,target.s_Score from Student inner join (select new.s_id,Course.c_name,new.s_Score from (select Score.* from Score where Score.s_Score<60)as new left outer join Course on Course.c_id=new.c_id)as target on target.s_id=Student.s_id;
38.select Student.s_id,Student.s_name from Student right outer join (select s_id,c_id from Score where s_Score>=80 and c_id=01) as new on new.s_id=Student.s_id;
39.select Course.c_name,new.numbers from Course left outer join (select c_id,count(s_id)as numbers from Score group by c_id)as new on new.c_id=Course.c_id;
40.select Student.*,foo.s_Score from Student right outer join(select Score.s_id,Score.s_Score from Score right outer join (select Course.c_id,Course.c_name from (select * from Teacher where t_name regexp "张三")as new left outer join Course on new.t_id=Course.t_id)as target on target.c_id=Score.c_id)as foo on foo.s_id=Student.s_id order by S_score desc limit 1;
41.select Student.*,total.c_id,total.s_Score from Student right outer join (select Score.s_id, Score.c_id, Score.s_Score from Score where Score.s_Score in (select s_Score from (select s_Score,count(s_Score)as ct from Score group by s_Score)as new where new.ct>1))as total on total.s_id=Student.s_id;
42.select Student.s_name,total.c_name,total.s_Score from (select target.s_id,Course.c_name,target.s_Score from (select new.s_id,new.c_id,new.s_Score from (select *,dense_rank() over(partition by c_id order by s_Score desc)as rank_ from Score)as new where new.rank_<=2)as target left outer join Course on Course.c_id=target.c_id)as total inner join Student on Student.s_id=total.s_id order by c_name;
43.select target.c_id,Course.c_name,target.numbers from (select * from (select c_id,count(c_id)as numbers from Score  group by c_id)as new where new.numbers>=5)as target left join Course on Course.c_id=target.c_id order by numbers desc,c_id;
44.select Student.s_name,target.s_id from Student right outer join (select * from (select s_id,count(c_id)as number from Score group by s_id)as new where new.number >=2)as target on target.s_id=Student.s_id;
45.select Student.* from Student right outer join (select * from (select s_id,count(c_id)as num from Score group by s_id) as new where new.num = any (select count(c_id)as count from Course))as target on target.s_id=Student.s_id;
46.select s_name,(2024-s_birth)as age from Student;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值