guangcheng0312q 2021-08-02 20:01:44 阅读数:48
今天开了个MySQL学习仓库Up-Up-MySQL,这是一个学习MySQL从入门实战到理论完善,再到精通的一个仓库,后面会把MySQL的学习资料上传上去!欢迎大家star与fork起来!
仓库地址:
https://github.com/Light-City/Up-Up-MySQL
也可以点击阅读原文!
学生表
Student(SId,Sname,Sage,Ssex)
课程表
Course(CId,Cname,TId)
教师表
Teacher(TId,Tname)
成绩表
SC(SId,CId,score)
导入数据:
查询数据:
导入表:
查询表:
导入表:
查询表:
导入表:
查询表:
查询出课程编号为'01'的学生信息与成绩
查询" 01 "课程比" 02 "课程成绩高的学生的信息及课程分数
由于要查询出学生的所有信息,所以上述的join要改为left/right join。
上述的left
可以换成right
。
查询同时存在" 01 "课程和" 02 "课程的情况
我们先通过两张子表得到课程01和课程02的成绩信息,然后笛卡儿积合并两张表,最后WHERE筛选
分析:先分别查找出这个学生选修'01'或'02'的信息,然后通过学生的SId
进行筛选,得到了这个学生同时存在" 01 "课程和" 02 "课程的情况。
如果对结果要求不高的,可以用in子查询。
查询存在" 01 "课程但可能不存在" 02 "课程的情况(不存在时显示为 null )
首先要明确查询的表是成绩表(SC
)的信息,这里的主要难点是:不存在显示为NULL。
这一道就是明显需要使用join的情况了,02可能不存在,即为left join的右侧或right join 的左侧即可。
左连接:
右连接:
查询不存在" 01 "课程但存在" 02 "课程的情况
方法一:
in子查询过滤。
方法二:
首先查询存在" 02 "课程但可能不存在" 01 "课程的情况(不存在时显示为 null )
然后使用WHERE过滤出不存在的01课程,也就是最后一条数据即可:
查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩
查询在 SC 表存在成绩的学生信息
方法一:使用distinct
关键字
方法二:使用exists
关键字
版权声明:本文为[guangcheng0312q]所创,转载请带上原文链接,感谢。 https://blog.51cto.com/u_12205414/3251565