(3)在Reports表中查询至少选修课了程号为C01和C02的学生学号和姓名。 (4)查询既没有选修课程号C01,也没有选修课程号C02的学生的学号和姓名。 (5) 查询每个同学基本信息及其选修课程的情况。 (6)查询每个学生及其选修课程的情况(若某一个学生没有选课,只输出学生的基本情况信息,其选课信息为空值)。 (7)查询选修了课程名为“GIS开发”的学生学号和姓名。 (8) 查询没有选修C02课程的学生学号和姓名。
时间: 2023-11-24 19:24:58 浏览: 335
好的,我将依次回答你的问题:
(3) 查询选修了程号为C01和C02的学生学号和姓名:
```
SELECT s.sno, s.sname
FROM Student s
WHERE s.sno IN (
SELECT r.sno
FROM Reports r
WHERE r.cno = 'C01'
) AND s.sno IN (
SELECT r.sno
FROM Reports r
WHERE r.cno = 'C02'
);
```
(4) 查询既没有选修课程号C01,也没有选修课程号C02的学生的学号和姓名:
```
SELECT s.sno, s.sname
FROM Student s
WHERE s.sno NOT IN (
SELECT r.sno
FROM Reports r
WHERE r.cno = 'C01'
) AND s.sno NOT IN (
SELECT r.sno
FROM Reports r
WHERE r.cno = 'C02'
);
```
(5) 查询每个同学基本信息及其选修课程的情况:
```
SELECT s.sno, s.sname, s.ssex, s.sage, r.cno, c.cname, c.ccredit, r.grade
FROM Student s
LEFT JOIN Reports r ON s.sno = r.sno
LEFT JOIN Course c ON r.cno = c.cno;
```
(6) 查询每个学生及其选修课程的情况(若某一个学生没有选课,只输出学生的基本情况信息,其选课信息为空值):
```
SELECT s.sno, s.sname, s.ssex, s.sage, r.cno, c.cname, c.ccredit, r.grade
FROM Student s
LEFT JOIN Reports r ON s.sno = r.sno
LEFT JOIN Course c ON r.cno = c.cno;
```
(7) 查询选修了课程名为“GIS开发”的学生学号和姓名:
```
SELECT s.sno, s.sname
FROM Student s
INNER JOIN Reports r ON s.sno = r.sno
INNER JOIN Course c ON r.cno = c.cno
WHERE c.cname = 'GIS开发';
```
(8) 查询没有选修C02课程的学生学号和姓名:
```
SELECT s.sno, s.sname
FROM Student s
WHERE s.sno NOT IN (
SELECT r.sno
FROM Reports r
WHERE r.cno = 'C02'
);
```
阅读全文