– 1、查询"01"课程比"02"课程成绩高的学生的信息及课程分数
SELECT student.*,a_score.s_score 01_score,b_score.s_score 02_score
FROM student JOIN score a_score ON student.s_id = a_score.s_id AND a_score.c_id='01'
JOIN score b_score ON student.s_id = b_score.s_id AND b_score.c_id='02'
WHERE a_score.s_score>b_score.s_score;
– 2、查询"01"课程比"02"课程成绩低的学生的信息及课程分数
3、查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩
SELECT student.s_id,s_name,ROUND(AVG(s_score),1) avg_score
FROM student JOIN score ON student.s_id=score.s_id
GROUP BY score.s_id HAVING avg_score>=60;
SELECT student.s_id,s_name,ROUND(AVG(s_score),1) avg_score
FROM student NATURAL JOIN score
GROUP BY student.s_id HAVING avg_score>=60;
– 4、查询平均成绩小于60分的同学的学生编号和学生姓名和平均成绩
SELECT student.s_id,student.s_name,ROUND(AVG(s_score),1) avg_score
FROM student JOIN score ON student.s_id=score.s_id
GROUP BY student.s_id HAVING avg_score <60
UNION
SELECT s_id,s_name,0 avg_score
FROM student
WHERE s_id NOT IN(SELECT DISTINCT s_id FROM score);
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
有些同学因为没成绩,就没在score表上。我们必须考虑这部分同学
– 5、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩
SELECT student.s_id,student.s_name,COUNT(score.c_id) count_score,SUM(score.s_score) sum_score
FROM student NATURAL JOIN score
GROUP BY student.s_id
UNION
SELECT s_id,s_name,0,0
FROM student
WHERE s_id NOT IN(SELECT s_id FROM score);
SELECT student.s_id,student.s_name,COUNT(score.c_id) count_score,SUM(score.s_score) sum_score
FROM student LEFT JOIN score ON student.s_id=score.s_id
GROUP BY student.s_id;