一个学生表,一个成绩表,怎么查询所有人的所有成绩?
1 个回答
想多了全是问题,想开了全是答案。楚灵你这个需求就是典型的**学生表(student)**和**成绩表(score)**做**关联查询**,保证**即使某个学生没有成绩记录也能查出来**(成绩为空)。 ## 1. 表结构示例 ```sql student(id, name) score(id, student_id, subject, score) ``` 假设: * `student.id` 是主键 * `score.student_id` 外键关联 `student.id` ## 2. SQL 查询 ### LEFT JOIN(推荐) ```sql SELECT s.id, s.name, sc.subject, sc.score FROM student s LEFT JOIN score sc ON s.id = sc.student_id; ``` **特点**: * `LEFT JOIN` 以 `student` 为主表,所有学生都会出现在结果里。 * 如果该学生没有成绩记录,对应的 `subject` 和 `score` 会是 `NULL`。 ### 结果示例: | id | name | subject | score | | -- | ---- | ------- | ----- | | 1 | 张三 | 语文 | 90 | | 1 | 张三 | 数学 | 85 | | 2 | 李四 | NULL | NULL | | 3 | 王五 | 英语 | 88 | ## 3. 如果要按科目汇总成一行 可以用**聚合 + CASE**: ```sql SELECT s.id, s.name, MAX(CASE WHEN sc.subject = '语文' THEN sc.score END) AS 语文, MAX(CASE WHEN sc.subject = '数学' THEN sc.score END) AS 数学, MAX(CASE WHEN sc.subject = '英语' THEN sc.score END) AS 英语 FROM student s LEFT JOIN score sc ON s.id = sc.student_id GROUP BY s.id, s.name; ``` 结果: | id | name | 语文 | 数学 | 英语 | | -- | ---- | ---- | ---- | ---- | | 1 | 张三 | 90 | 85 | NULL | | 2 | 李四 | NULL | NULL | NULL | | 3 | 王五 | NULL | NULL | 88 |发布于 2025-08-12 20:09 •IP属地 辽宁举报评论收藏
公众号进入网站体验更佳

