mysql查询至少有一门课与学号为01的学生所学课程相同的学生的学号和姓名
封面图
•
2026-01-17
•
MySQL
299
0
0
0
要查询**至少有一门课与学号为01的学生所学课程相同**的学生的学号和姓名,可以使用 `IN` 或 `EXISTS` 子句来实现。 假设你有以下表结构: - `student` 表:存储学生信息 - `sno`:学生学号(主键) - `sname`:学生姓名 - `score` 表:存储学生成绩 - `sno`:学生学号 - `cno`:课程编号 --- ### ✅ 查询语句(使用 `IN`): ```sql SELECT DISTINCT s.sno, s.sname FROM student s WHERE s.sno IN ( SELECT DISTINCT sc.sno FROM score sc WHERE sc.cno IN ( SELECT cno FROM score WHERE sno = '01' ) ); ``` --- ### 📌 解释: 1. 首先查出学号为 `01` 的学生所学的所有课程编号(`cno`): ```sql SELECT cno FROM score WHERE sno = '01' ``` 2. 然后找出所有选修了这些课程的学生学号(`sno`): ```sql SELECT DISTINCT sc.sno FROM score sc WHERE sc.cno IN (上面的查询结果) ``` 3. 最后根据这些学号查出对应的学生姓名和学号。 --- ### ✅ 使用 `EXISTS` 的写法(可读性更强): ```sql SELECT DISTINCT s.sno, s.sname FROM student s WHERE EXISTS ( SELECT 1 FROM score sc WHERE sc.sno = s.sno AND sc.cno IN ( SELECT cno FROM score WHERE sno = '01' ) ); ``` --- ### 📝 注意事项: - 如果学号为 `01` 的学生没有选课,这个查询会返回空。 - 如果你想查“至少有一门课相同”,而不是“所有课程都相同”,那么上述方法是正确的。 - 如果你需要查“所有课程都相同”的学生,可以用 `NOT EXISTS` 或 `GROUP BY HAVING COUNT` 的方式。 --- 如需我帮你写出“所有课程都相同”的版本,也可以告诉我。
上一篇:
mysql查询没有学全所有课的学生的学号、姓名
下一篇:
MySQL开启binlog日志
标题录入,一次不能超过6条
留言
评论