SQL进阶练习题11-15
SQL进阶练习题11-15
【SQL进阶练习题11-15】大背景和建表、插入语句就不啰嗦了,参考第一篇。
四张表概要:
- 学生表
student(sid,sname,sage,ssex) --sid 学生编号,sname 学生姓名,sage 出生年月,ssex 学生性别 - 课程表
course(cid,cname,tid) --cid 课程编号,cname 课程名称,tid 教师编号 - 教师表
teacher(tid,tname) --tid 教师编号,tname 教师姓名 - 成绩表
sc(sid,cid,score) --sid 学生编号,cid 课程编号,score 分数
为了方便查看,我把四个表截了图:
文章图片
student
文章图片
course
文章图片
teacher
文章图片
sc
- 查询没有学全所有课程的同学的信息
- 查询至少有一门课与学号为" 01 "的同学所学相同的同学的信息
- 查询和" 01 "号的同学学习的课程完全相同的其他同学的信息
- 查询没学过"张三"老师讲授的任一门课程的学生姓名
- 查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩
select * from student
where sid in
(select sid from sc
group by sid
having count(cid)<>3);
查询至少有一门课与学号为" 01 "的同学所学相同的同学的信息
select * from student where sid in (
select distinct sid from sc where cid in
(select cid from sc where sid='01'));
查询和" 01 "号的同学学习的课程完全相同的其他同学的信息
select * from student
where sid in(select distinct sid from sc where cid in(select distinct cid from sc where sid='01') and sid<>'01'
group by sid
having count(cid)=3);
查询没学过"张三"老师讲授的任一门课程的学生姓名
select sname from student
where sid not in
(select sid from sc
where cid in(select cid from course
where tid in(select tid from teacher where tname ='张三')));
查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩
select s.sid,s.sname,avg(sc.score) from student s,sc
where sc.score<60 and s.sid=sc.sid
group by s.sid,s.sname
having count(sc.score)>=2;
select s.sid,s.sname,a.avg from student s right join
(select sid,avg(score) avg from sc where score<60 group by sid having count(cid)>=2) a
on s.sid=a.sid;
推荐阅读
- 【生信技能树】R语言练习题|【生信技能树】R语言练习题 - 中级
- 推荐系统论文进阶|CTR预估 论文精读(十一)--Deep Interest Evolution Network(DIEN)
- py连接mysql
- 2019-01-18Mysql中主机名的问题
- MySql数据库备份与恢复
- 普通人进阶的三个过程-很多人都知道,但却本末倒置
- 易效能进阶课程笔记29
- mysql|InnoDB数据页结构
- 数据库|SQL行转列方式优化查询性能实践
- mysql中视图事务索引与权限管理