mysql查询学过编号为01的课程并且也学过编号为02的课程的学生的学号、姓名
封面图
•
2025-12-03
•
MySQL
196
0
0
0
要查询**同时学过编号为01的课程**和**编号为02的课程**的学生的**学号、姓名**,可以使用 `JOIN` 或者 `EXISTS` 来实现。 假设你有以下表结构: - **学生表**:`student`(学号 `sno`,姓名 `sname`) - **课程表**:`course`(课程编号 `cno`,课程名称 `cname`) - **选课表**:`sc`(学号 `sno`,课程编号 `cno`) --- ### 方法一:使用 `JOIN` ```sql SELECT s.sno, s.sname FROM student s WHERE s.sno IN ( SELECT sc.sno FROM sc WHERE sc.cno = '01' ) AND s.sno IN ( SELECT sc.sno FROM sc WHERE sc.cno = '02' ); ``` --- ### 方法二:使用 `INNER JOIN` ```sql SELECT s.sno, s.sname FROM student s INNER JOIN sc sc1 ON s.sno = sc1.sno AND sc1.cno = '01' INNER JOIN sc sc2 ON s.sno = sc2.sno AND sc2.cno = '02'; ``` --- ### 方法三:使用 `EXISTS` ```sql SELECT s.sno, s.sname FROM student s WHERE EXISTS ( SELECT 1 FROM sc WHERE sc.sno = s.sno AND sc.cno = '01' ) AND EXISTS ( SELECT 1 FROM sc WHERE sc.sno = s.sno AND sc.cno = '02' ); ``` --- ### 总结 以上三种方法都可以实现你的需求,推荐使用 **方法二(JOIN)**,因为效率通常较高,代码也更清晰。你可以根据实际表结构和索引选择最合适的方式。如果你能提供具体的表结构,我可以进一步优化查询语句。
上一篇:
mysql按各科成绩进行排序,并显示排名
下一篇:
mysql查询课程编号为“02”的总成绩
标题录入,一次不能超过6条
留言
评论