2.检索没有选修课程名为“Math”的学生学号与姓名,请写出SQL语句
时间: 2024-05-10 13:15:47 浏览: 179
假设学生表为students,选修课程表为courses,选课关系表为sc,可以使用如下SQL语句检索没有选修课程名为“Math”的学生学号与姓名:
```
SELECT s.sid, s.sname
FROM students s
WHERE s.sid NOT IN (
SELECT sc.sid
FROM sc, courses c
WHERE sc.cid = c.cid AND c.cname = 'Math'
);
```
其中,子查询的作用是查询选修了课程名为“Math”的学生学号,然后在外层查询中使用 NOT IN 运算符排除这些学生。
相关问题
学生表 S(SNO,SNAME,AGE,SEX,SDEPT); 学生、课程、成绩表 SC(SNO,CNO,GRADE); 课程表 C(CNO,CNAME,CDEPT,TNAME); 1. 检索出所有学生及其课程 “Math”的考试成绩单(注意:并非所有学生都有参加了 课程“Math”的考试),请写出 SQL 语句 2. 检索没有选修课程名为“Math”的学生学号与姓名,请写出 SQL 语句
1. 检索出所有学生及其课程 “Math”的考试成绩单(注意:并非所有学生都有参加了 课程“Math”的考试),请写出 SQL 语句
```sql
SELECT S.SNO, S.SNAME, SC.GRADE
FROM S
LEFT JOIN SC ON S.SNO = SC.SNO
LEFT JOIN C ON SC.CNO = C.CNO
WHERE C.CNAME = 'Math'
```
2. 检索没有选修课程名为“Math”的学生学号与姓名,请写出 SQL 语句
```sql
SELECT S.SNO, S.SNAME
FROM S
WHERE NOT EXISTS (
SELECT 1
FROM SC
WHERE SC.SNO = S.SNO AND SC.CNO = (
SELECT CNO FROM C WHERE CNAME = 'Math'
)
)
```
或者
```sql
SELECT S.SNO, S.SNAME
FROM S
LEFT JOIN SC ON S.SNO = SC.SNO AND SC.CNO = (
SELECT CNO FROM C WHERE CNAME = 'Math'
)
WHERE SC.SNO IS NULL
```
这两个语句都可以实现检索出没有选修课程名为“Math”的学生学号与姓名的功能。
阅读全文
相关推荐





