MySQL 查询特定课程成绩高低学生信息及分数
假设学生信息表为 students,课程信息表为 courses,成绩表为 scores,可以使用以下 SQL 语句查询 01 课程成绩比 02 课程成绩高的学生信息及课程分数:
SELECT students.*, scores.score AS '01_score', scores2.score AS '02_score'
FROM students
LEFT JOIN scores ON students.id = scores.student_id AND scores.course_id = '01'
LEFT JOIN scores AS scores2 ON students.id = scores2.student_id AND scores2.course_id = '02'
WHERE scores.score > scores2.score OR (scores.score IS NOT NULL AND scores2.score IS NULL)
解释一下 SQL 语句:
- 使用 LEFT JOIN 连接学生信息表和成绩表,通过 scores.course_id = '01' 限定查询 01 课程成绩;
- 使用 LEFT JOIN 连接学生信息表和成绩表,通过 scores2.course_id = '02' 限定查询 02 课程成绩;
- WHERE 子句中使用条件 scores.score > scores2.score 表示查询 01 课程成绩比 02 课程成绩高的学生信息;
- WHERE 子句中使用条件 (scores.score IS NOT NULL AND scores2.score IS NULL) 表示查询只有 01 课程成绩的学生信息。
注意,如果成绩表中没有学生的成绩记录,则这些学生不会被查询出来。如果想要查询所有学生的信息,应该使用 OUTER JOIN 连接学生信息表和成绩表。
原文地址: https://www.cveoy.top/t/topic/oXRb 著作权归作者所有。请勿转载和采集!