学生表 (students)
id | name | age |
---|---|---|
1 | 张三 | 20 |
2 | 李四 | 21 |
3 | 王五 | 22 |
课程表 (courses)
id | name | credit |
---|---|---|
1 | 数学 | 3 |
2 | 英语 | 4 |
3 | 物理 | 3 |
成绩表 (scores)
student_id | course_id | score |
---|---|---|
1 | 1 | 85 |
1 | 2 | 78 |
2 | 1 | 92 |
2 | 2 | 85 |
2 | 3 | 89 |
3 | 2 | 90 |
3 | 3 | 75 |
SELECT name, age FROM students;
SELECT name, credit FROM courses;
SELECT s.name AS student_name, c.name AS course_name, sc.score
FROM students s
JOIN scores sc ON s.id = sc.student_id
JOIN courses c ON sc.course_id = c.id;
SELECT student_id, AVG(score) AS avg_score
FROM scores
GROUP BY student_id;
SELECT s.name AS student_name
FROM students s
WHERE NOT EXISTS (
SELECT *
FROM courses
WHERE NOT EXISTS (
SELECT *
FROM scores
WHERE scores.student_id = s.id AND scores.course_id = courses.id
)
);
SELECT s.name AS student_name
FROM students s
LEFT JOIN scores sc ON s.id = sc.student_id
WHERE sc.student_id IS NULL;
SELECT course_id, AVG(score) AS avg_score
FROM scores
GROUP BY course_id;
SELECT t.name AS teacher_name, COUNT(c.id) AS course_count
FROM teachers t
JOIN courses c ON t.id = c.teacher_id
GROUP BY t.name;
SELECT s.name AS student_name
FROM students s
JOIN scores sc ON s.id = sc.student_id
WHERE sc.course_id IN (1, 2)
GROUP BY s.name
HAVING COUNT(DISTINCT sc.course_id) = 2;
SELECT student_id, COUNT(course_id) AS course_count
FROM scores
GROUP BY student_id;