前言:MySQL一系列操作猛如虎,代码易懂清晰,结构也简单,今天我们来谈一谈MySQL里面的一些难度偏中上的查询语句。虽然难度有点大,但是我还是能给各位博客朋友们讲清楚~~还有谁?嗯?我先整理一下发型…

1、表格创建

创建学生信息表

create table stu(s_id varchar(5),
   s_name varchar(5),
   s_sex varchar(1),
   s_age int(3),s_day date);

insert into stu values
("001","李华","男",23,'1996-8-16'),
("002","王二","男",24,'1997-3-16'),
("003","赵敏","女",23,'1990-5-26'),
("004","张莹莹","女",22,'1995-2-16'),
("005","朱亚军","男",25,'1999-8-16'),
("006","马云","男",28,'1993-12-16');

创建学生分数获得表

create table scores (s_id varchar(5),
    c_id varchar(3),score float);
    
insert into scores values 
("001","01",135),
("005","01",120),
("003","01",110),
("002","01",90),
("005","02",140),
("001","02",125.5),
("004","02",100),
("006","02",90),
("002","03",102),
("005","03",100.6),
("001","03",100),
("003","03",95.6),
("004","03",83),
("003","02",80),
("006","03",79.5);

2、题目部分

题目一:查询比学生编号为002的学生的所有课程成绩都高的学生信息
        分析:要比002所有课程成绩都高,意味着要别人的最低成绩都高于002的最高成绩。

select  stu.* from stu where s_id in 
    (select  s_id from scores group by score having min(score)> 
    (select max(score) from scores where s_id=002));
# 答案
001	李华	男	23	1996-8-16
003	赵敏	女	23	1990-5-26
005	朱亚军	男	25	1999-8-16

题目二:查询平均成绩大于等于100分的学生的成绩信息

select * from scores where s_id in 
    (select s_id from scores group by s_id having round(avg(score),2)>=100);
# 答案
001	01	135
005	01	120
005	02	140
001	02	125.5
005	03	100.6
001	03	100

题目三:查询每位同学的每科成绩的最高分

select * from scores  group by c_id,s_id having max(score) order by c_id,score desc  ;
# 答案
001	01	135
005	01	120
003	01	110
002	01	90
005	02	140
001	02	125.5
004	02	100
006	02	90
003	02	80
002	03	102
005	03	100.6
001	03	100
003	03	95.6
004	03	83
006	03	79.5

题目五:查询每科成绩的最高分

select max(score) from scores group by c_id;
# 答案
135
140
102