前言:MySQL一系列操作猛如虎,代码易懂清晰,结构也简单,今天我们来谈一谈MySQL里面的一些难度偏中上的查询语句。虽然难度有点大,但是我还是能给各位博客朋友们讲清楚~~还有谁?嗯?我先整理一下发型…
创建学生信息表
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);
题目一:查询比学生编号为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
题目六:压轴题–查询每门课程的第二名和第三名的成绩信息(过后揭晓答案)
大家都知道嘛,男人到了17、18岁呢难免有点那啥,你比方说我好朋友小熊就出现过这事儿,以前高中时候嘛,我们班长就谈了一女朋友,而且他两还合租了,然后过几个周我们一起吃饭,由于好几周没见又瘦了,结果小熊调侃到:“你小子早晚得死在女人身上!”然后班长撇下嘴说到:“你早晚得死自己手里!”,然后小熊默默低下头,看了看自己的右手,老茧确实比以前厚了许多…就是这么个情况嘛。
今天到这里就结束了哟//每篇文章都有文末彩蛋–轻松一刻哟~加关注学习更多MySQL知识!谢谢观看,我是Jetuser-data
链接: [https://blog.csdn.net/L1542334210]
CSND:L1542334210
祝大家工作顺利!阖家欢乐!