本篇文章主要是对SQL经典50题进行详细解析。
解析包含:1、解题思路,2、考核知识点,3、答案;
首先,表结构用脑图输出出来,如下所示:
表结构
先进行数据准备,建表以及插入数据。
建表
1.查询"01"课程比"02"课程成绩高的学生的信息及课程分数
解题思路:
第一步:关键词有“课程编号”、“课程成绩”、“学生信息”,锁定使用表:学生表、成绩表。
第二步:给出学生信息及课程分数,通过主键sid关联学生表和课程表。
第三步:比较同一个学生不同课程的成绩,再关联一次课程表,利用sid、cid进行关联。
第四步:根据题目,用where比较分数筛选结果。
考核知识点:join,where
答案:
题1
1.1 查询存在" 01 "课程但可能不存在" 02 "课程的情况(不存在时显示为 null )
解题思路:
第一步:关键词有“课程编号”、“学生编号”,锁定使用表:成绩表。
第二步:分别查询出存在" 01 "课程的学生和存在" 02 "课程的学生。
第三步:对两个子查询进行关联,用sid进行左联接。
考核知识点:where, 子查询,left join
答案:
题1.1
1.2 查询同时存在01和02课程的情况
解题思路:同1.1,把left join改为join
考核知识点:where, 子查询,join
答案:
题1.2
1.3 查询选择了02课程但没有01课程的情况
解题思路:类似1.1,把left join改为right join
考核知识点:where, 子查询,right join
答案:
题1.3
小结:上面的题主要考察join、left join、right join。
2.查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩
解题思路:
第一步:关键词有“平均成绩”、“学生编号”、“学生姓名”,锁定使用表:成绩表、学生表。
第二步:给出学生信息及课程分数,通过主键sid关联学生表和课程表。。
第三步:根据题目,用group by聚合计算出平均成绩,然后筛选出大于等于60分的学生。
考核知识点:join、group by、avg()
答案:
题2
3.查询在 SC 表存在成绩的学生信息
解题思路:
第一步:关键词有“SC”、“学生信息”,锁定使用表:成绩表、学生表。
第二步:用EXISTS判断在SC表存在成绩的学生信息
考核知识点:EXISTS语句
答案:
题3
4.查询所有同学的学生编号、学生姓名、选课总数、所有课程的成绩总和
解题思路:
第一步:关键词有“学生编号”、“学生姓名”、“选课总数”、“课程成绩”,锁定使用表:成绩表、学生表。
第二步:通过主键sid关联学生表成绩表,得到学生信息、学生成绩的宽表
第三步:根据题目,用group by聚合计算选课总数和总成绩
考核知识点:left join、group by、count()、sum()、ifnull()
答案:
题4
5.查询「李」姓老师的数量
解题思路:
第一步:关键词有“老师的数量”,锁定使用表:教师表。
第二步:先筛选出「李」姓老师,再汇总统计「李」姓老师的数量
考核知识点:like、where、%、count()
答案:
题5
6.查询学过「张三」老师授课的同学的信息
解题思路:
第一步:关键词有“老师”、“学生信息”,锁定使用表:教师表、学生表、成绩表、课程表。
第二步:通过sid关联学生表、成绩表,再通过cid关联课程表,最后通过tid关联教师表。
第三步:用where筛选出「张三」老师授课的同学的信息。
考核知识点:多重连接join
答案: