SQL经典50题题解本篇⽂章主要是对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聚合计算选课总数和总成绩
groupby分组考核知识点:left join、group by、count()、sum()、ifnull()
考核知识点:
答案:
题4
5.查询「李」姓⽼师的数量
解题思路:
第⼀步:关键词有“⽼师的数量”,锁定使⽤表:教师表。
第⼆步:先筛选出「李」姓⽼师,再汇总统计「李」姓⽼师的数量
考核知识点:like、where、%、count()
考核知识点:
答案: