MYSQL检索学号为S001学生选修的而S003学号学生没选修的课程号
时间: 2024-12-29 14:32:56 浏览: 10
在MySQL中,可以使用JOIN、WHERE和NOT EXISTS等语句来实现这个查询。假设我们有两个表,一个是`students`(包含学生信息,如`sno`表示学号),另一个是`courses`(包含课程信息,如`cid`表示课程号)。你可以通过以下SQL语句来获取结果:
```sql
SELECT c.cid
FROM courses c
JOIN student_courses sc ON c.cid = sc.course_id -- 这里假设`student_courses`表记录了学生选课情况
JOIN students s ON s.sno = sc.student_sno
WHERE s.sno = 'S001' AND NOT EXISTS (SELECT * FROM student_courses WHERE sno = 'S003' AND course_id = c.cid)
```
这个查询首先将`courses`表与`student_courses`表通过课程ID连接起来,再与`students`表通过学号连接。然后它筛选出S001学生的所有课程,并排除那些S003学生也选过的课程。
相关问题
要查询s001学生选修而s003学生未选修的课程,需要先找到s001和s003两个学生的选课记录,然后比较他们选修的课程,找出s001选修而s003未选修的课程。可以通过数据库查询语句实现。
是的,可以通过以下 SQL 查询语句实现:
```
SELECT course_name
FROM course
WHERE course_id IN (
SELECT course_id
FROM student_course
WHERE student_id = 's001'
) AND course_id NOT IN (
SELECT course_id
FROM student_course
WHERE student_id = 's003'
);
```
这个查询语句的意思是:先从学生选课表中找到学生s001选修的课程,然后在课程表中找到这些课程的名称;接着找到学生s003选修的课程,将s001选修的课程名称与s003选修的课程名称进行比较,找到s001选修而s003未选修的课程名称。
10-35 查询学生选修的课程为‘S001’或‘S003’的学生选修的课程,输出结果集按课程号升序排序,且不包含重复的课程记录。 提示:请使用UNION语句作答。
根据您的要求,您可以使用如下的SQL语句来查询学生选修的课程为'S001'或'S003'的学生选修的课程,并按照课程号升序排序,且不包含重复的课程记录:
```
SELECT DISTINCT course_id
FROM student_course
WHERE student_id IN (
SELECT student_id
FROM student_course
WHERE course_id = 'S001'
UNION
SELECT student_id
FROM student_course
WHERE course_id = 'S003'
)
ORDER BY course_id ASC;
```
这条SQL语句使用了UNION语句将两个子查询的结果集合并,并使用DISTINCT关键字去除重复记录,最终按照课程号升序排序。
阅读全文