学生表 S(SNO,SNAME,AGE,SEX,SDEPT); 学生、课程、成绩表 SC(SNO,CNO,GRADE); 课程表 C(CNO,CNAME,CDEPT,TNAME); 1. 检索出所有学生及其课程 “Math”的考试成绩单(注意:并非所有学生都有参加了 课程“Math”的考试),请写出 SQL 语句 2. 检索没有选修课程名为“Math”的学生学号与姓名,请写出 SQL 语句
时间: 2024-02-17 10:00:01 浏览: 314
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”的学生学号与姓名的功能。
相关问题
STUDENT表有 sno sname ssex sage sdept,couse 有cno cname credit semester,sc有sno cno gradr,请使用SQL语句完成查询选修了生物信息学课程且成绩高于该门课程平均分数的学生的姓名。
SELECT s.sname
FROM student s, sc, couse c
WHERE s.sno = sc.sno
AND sc.cno = c.cno
AND c.cname = '生物信息学'
AND sc.grade > (
SELECT AVG(sc.grade)
FROM sc, couse
WHERE sc.cno = couse.cno
AND couse.cname = '生物信息学'
)
```
学生表S (SNO,SNAME,AGE, SEX,SDEPT) ;学生、课程、成绩表SC (SNO,CNO,GRADE) ;课程表C(CNO,CNAME,CDEPT, TNAME) ;检索出所有学生及其课程“Math"的考试成绩单(注意:并非所有学生都有参加了
可以使用以下 SQL 语句来检索出所有学生及其课程 "Math" 的考试成绩单:
```
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';
```
这里使用了 LEFT JOIN 来保证即使某个学生没有参加 Math 课程的考试,也能被检索出来。
阅读全文