R10-10 创建视图统计需要重修的名单 分数 4 作者 雷亮 单位 重庆科技大学 现有一个学生数据库,内包含学生表(Student)、课程表(Course)和选修表(SC)。 在学期末,教务处要制定下学期的重修任务。假设选修表中成绩为空的同学都需要重修。请你设计一个视图V_RestudyList,用于统计需要重修的学生信息,如系、学号、姓名和课程等。 提示:请使用CREATE VIEW语句作答,并请注意数据表名、列名大小写。 表结构: 学生表(Student)、课程表(Course)和选修表(SC)结构如下: CREATE TABLE `Student` ( `Sno` varchar(20) NOT NULL, `Sname` varchar(10) DEFAULT NULL, `Ssex` varchar(2) DEFAULT NULL, `Sage` int(3) DEFAULT NULL, `Sdept` varchar(10) DEFAULT NULL, PRIMARY KEY (`Sno`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `Course` ( `Cno` varchar(10) NOT NULL, `Cname` varchar(20) DEFAULT NULL, `Cpno` varchar(10) DEFAULT NULL, `Ccredit` int(3) DEFAULT NULL, PRIMARY KEY (`Cno`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `SC` ( `Sno` varchar(20) NOT NULL, `Cno` varchar(10) NOT NULL, `Grade` int(3) DEFAULT NULL, PRIMARY KEY (`Sno`,`Cno`), KEY `Cno` (`Cno`), CONSTRAINT `sc_ibfk_1` FOREIGN KEY (`Sno`) REFERENCES `student` (`Sno`), CONSTRAINT `sc_ibfk_2` FOREI
时间: 2025-06-05 13:54:31 浏览: 22
### 创建视图 V_RestudyList 的 SQL 语句
为了实现需求,可以使用 `CREATE VIEW` 语句来定义一个名为 `V_RestudyList` 的视图。该视图将从选修表 (`SC`) 中筛选出成绩为空的学生记录,并通过连接学生表 (`Student`) 和课程表 (`Course`) 来获取学生的系、学号、姓名以及对应的课程信息。
以下是完整的 SQL 语句:
```sql
CREATE VIEW V_RestudyList AS
SELECT
S.Dept AS 系,
S.Sno AS 学号,
S.Sname AS 姓名,
C.Cname AS 课程
FROM
SC T
JOIN
Student S ON T.Sno = S.Sno
JOIN
Course C ON T.Cno = C.Cno
WHERE
T.Grade IS NULL;
```
#### 解析
1. **数据源**
- 使用了三个表:`SC` 表存储选课和成绩信息;`Student` 表存储学生基本信息;`Course` 表存储课程信息。
- 这些表之间通过外键关系相连:`SC(Sno)` 对应 `Student(Sno)`,而 `SC(Cno)` 对应 `Course(Cno)`[^1]。
2. **字段选择**
- 选择了来自 `Student` 表的 `Dept`(系)、`Sno`(学号)和 `Sname`(姓名),以及来自 `Course` 表的 `Cname`(课程名称)。这些字段能够满足题目中的要求[^2]。
3. **条件过滤**
- 在 `WHERE` 子句中指定了 `T.Grade IS NULL`,表示只选取那些成绩为空的学生记录[^3]。
4. **视图功能**
- 视图的作用在于封装复杂的查询逻辑,使得后续可以直接通过简单的查询操作访问所需的数据集合[^5]。
---
### 示例验证
假设存在如下基础数据结构及其内容:
- **Student 表**
| Sno | Sname | Dept |
|-----|-------|----------|
| 101 | Alice | Computer |
| 102 | Bob | Math |
- **Course 表**
| Cno | Cname |
|-----|-------------|
| CS1 | Database |
| MA1 | Calculus |
- **SC 表**
| Sno | Cno | Grade |
|-----|-----|-------|
| 101 | CS1 | 90 |
| 102 | MA1 | NULL |
运行上述 `CREATE VIEW` 后,查询视图的结果将是:
```sql
SELECT * FROM V_RestudyList;
```
结果为:
| 系 | 学号 | 姓名 | 课程 |
|---------|------|------|----------|
| Math | 102 | Bob | Calculus |
这表明只有成绩为空的学生被成功提取出来并展示所需的详细信息。
---
### 注意事项
如果需要进一步扩展此视图的功能,比如加入其他约束条件或者增加额外的信息列,则可以在原基础上修改 `SELECT` 或者 `WHERE` 部分的内容[^4]。
---
阅读全文
相关推荐















