当前位置: 代码迷 >> 综合 >> MySql 高级查询强化学习
  详细解决方案

MySql 高级查询强化学习

热度:95   发布时间:2024-03-08 04:49:08.0

近期从推文上看到一篇面试题上考察的sql编写能力,感觉好多聚合函数的知识还需要巩固一下,特意摘出几个经典的语句在这里给大家分享一下,希望对大家有帮助。

建表及插入语句如下:

create table student(  -- 创建学生表
sid varchar(20),
sname varchar(20),
sage int
);

-- 学生表数据简单插入
insert into student values('s01','唐妍',18);
insert into student values('s02','胡哥',19);
insert into student values('s03','刘诗',18);
insert into student values('s04','杨蜜',17);
insert into student values('s05','何建华',19);
insert into student values('s06','彭鱼彦',19);

create table teacher( -- 教师表
tid varchar(20),
tname varchar(20)
);
insert into teacher values('t01','高磊');
insert into teacher values('t02','韩争');
insert into teacher values('t03','李征辉');
insert into teacher values('t04','何倩文');
insert into teacher values('t05','刘宏');
insert into teacher values('t06','彭伟');

create table lessons( -- 课程表
cid varchar(20),
cname varchar(20),
cteacher varchar(20)
);
insert into lessons values('c01','高等数学','高磊');
insert into lessons values('c02','英语','韩争');
insert into lessons values('c03','计算机基础','李征辉');
insert into lessons values('c04','汇编语言','何倩文');
insert into lessons values('c05','电子商务','李征辉');

create table score(  -- 分数表
sid varchar(20),
cid varchar(20),
cscore int
);
insert into score values('s01','c01',58);
insert into score values('s01','c02',59);
insert into score values('s01','c03',55);
insert into score values('s02','c02',83);
insert into score values('s02','c02',79);
insert into score values('s02','c05',77);
insert into score values('s03','c01',55);
insert into score values('s03','c03',81);
insert into score values('s03','c04',73);
insert into score values('s04','c01',67);
insert into score values('s04','c02',78);
insert into score values('s04','c03',82);
insert into score values('s04','c05',80);
insert into score values('s05','c01',61);
insert into score values('s04','c04',78);

-- 1 查询选修“李征辉”老师所授课程的学生中,成绩最高的学生姓名及其成绩
select s.sname, max(sc.Cscore) from student s 
left join score sc on s.sid=sc.sid where sc.cid in (select cid from lessons where Cteacher = '李征辉');

-- 2 查询不同老师所教不同课程平均分从高到低显示
select c.cteacher,c.cname, avg(sc.cscore) from score sc 
left join lessons c on sc.cid=c.cid 
group by sc.cid 
order by avg(sc.cscore) desc;

-- 3 查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩
select s.sid, s.sname, avg(sc.cscore) from student s left join score sc on s.sid = sc.sid 
where s.sid in(select sid from score sc where cscore < 60 group by sid having count(sid) > 2);

-- 4 查询所有同学的学号、姓名、选课数、总成绩
select c.sid,s.sname,count(c.cid) ,sum(cscore) from score c 
left join student s on c.sid=s.sid
group by c.sid;

--  5查询没学过“何倩文”老师课的同学的学号、姓名;
select sid, sname from student 
where sid not in(select sid from score 
where cid =(select cid from lessons where cteacher = '何倩文')
);

 

--不积跬步无以至千里!

 

 

  相关解决方案