
第一步:锁定表为学生表和成绩表
第二步:查出平均成绩大于等于85的学生
SELECT
sid,
AVG(score) AS avg_score
FROM sc
GROUP BY sid
HAVING avg_score >= 85;

第三步:关联学生表,获取到学生的学号和姓名,然后从结果中选出想要的字段
SELECT
a.sid,b.`Sname`,a.avg_score
FROM(
SELECT
sid,
AVG(score) AS avg_score
FROM sc
GROUP BY sid
HAVING avg_score >= 85) a
LEFT JOIN student b
ON a.sid = b.sid;

第一步:锁定表,学生表、成绩表、课程表
第二步:从课程表查出【数学】的课程编号
SELECT * FROM course WHERE course.`Cname` = '数学';

第三步:关联成绩表,查询【数学】分数低于60分的学生
SELECT
*
FROM (SELECT * FROM course WHERE course.`Cname` = '数学' ) a
JOIN sc b ON a.cid = b.cid;

第四步:关联学生表,获取学生的姓名,并过滤掉成绩低于60分的
SELECT
*
FROM (SELECT * FROM course WHERE course.`Cname` = '数学' ) a
JOIN sc b ON a.cid = b.cid
JOIN student c ON b.sid = c.sid
WHERE b.`score` < 60;

第五步:筛选出需要的字段
SELECT
c.sid,
c.sname,
a.cname,
b.score
FROM (SELECT * FROM course WHERE course.`Cname` = '数学' ) a
JOIN sc b ON a.cid = b.cid
JOIN student c ON b.sid = c.sid
WHERE b.`score` < 60;

第一步:锁定表,学生表,成绩表
第二步:学生表左连接成绩表(因为学生表中的所有记录都需要出现在结果中)
SELECT
a.*,
b.score
FROM student a
LEFT JOIN sc b
ON a.sid = b.sid;

70分以上的姓名、课程名称和分数第一步:锁定表,成绩表、学生表、课程表
第二步:从成绩表筛选出所有成绩大于70的记录
SELECT * FROM sc WHERE score > 70;

第三步:关联学生表,获取学生的姓名,关联课程表,获取课程的名称,然后选出想要的字段
SELECT
b.sname,
c.cname,
a.score
FROM (SELECT * FROM sc WHERE score > 70) a
JOIN student b
ON a.sid = b.sid
JOIN course c
ON a.cid = c.cid;

第一步:从成绩表中过滤出哪些记录的分数小于60分,然后去重获取到cid
SELECT
DISTINCT cid
FROM sc
WHERE score < 60;

第二步:从课程表获取课程信息
SELECT
*
FROM course
WHERE cid IN (SELECT DISTINCT cid FROM sc WHERE score < 60);
