数据库实验八 视图第1关:建立基于单表的视图,在视图中插入、删除和修改记录
时间: 2024-10-27 15:07:13 浏览: 406
数据库实验八 - 视图部分的第一步通常是创建基础视图。视图是一种虚拟表格,它是从一个或多个实际表(称为基础表)通过查询生成的结果集。在这一环节,你会学习如何:
1. **创建视图**:首先,你需要使用SQL语句如 `CREATE VIEW` 来指定视图的名称,并基于一个特定的表(可能是基本的用户、订单或产品信息表),通过选择需要显示的列和可能的条件来定义视图。
例如:
```sql
CREATE VIEW Customers_Info AS
SELECT CustomerID, Name, Email FROM Customers;
```
这将创建一个名为Customers_Info的新视图,只包含客户ID、名字和邮箱字段。
2. **插入操作**:对视图的插入通常不会像普通表那样直接添加新的数据,因为视图是动态查询结果。但是,你可以更新基础表的数据,然后视图会反映出改变。
3. **删除操作**:同样,无法直接删除视图中的记录,但可以删除基础表中的数据,随之视图也将自动反映这种变化。
4. **修改记录**:如果视图是简单地基于基础表的列,你可以通过更新基础表来间接修改视图中的记录。但如果视图有计算或过滤的部分,则可能需要更复杂的SQL来调整基础表。
相关问题
基于数据库XK中Student,StuCou,Course表,了解其数据库和表中的含义,再为其创建相应的视图。 1、创建视图View_student,选择计算机软件专业的学生信息。 2、创建视图View_student_male,构建条件是选择计算机软件专业的男学生的学号、姓名,还要求包含其选修的课程号及成绩。 3、创建一个平均成绩的视图View_student_avg,包含有两个列:学号和平均成绩,并且学号列用“学号”来代替,平均成绩列用“均分”来表示。 4、在视图View_student_avg 中查找平均成绩在80 以上的学号及平均成绩。 5、为视图View_student 增加一条记录。查看并比较插入前和插入后的视图和基本表相应的数据,有什么变化?比较插入的这条记录是计算机软件专业的专业与插入的这条记录是除计算机软件专业以外的专业,请问他们在插入前和插入后的视图和基本表相应的数据,又有什么变化? (提示:视图数据插入Insert…… Values) 6、修改视图View_student_male,使选修“101”课程的成绩提高5 分。 (提示:视图数据修改:Update) 7、根据姓名(姓名由第5题给出)删除视图View_student第5题中所添加的那条记录。 (提示:视图数据删除:Delete) 思考:如删除视图View_student 中姓名叫“刘丽”的记录,则会出现什么情况?为什么?但是如果一定要删除视图View_student中“刘丽”的这条记录,请问怎么操作?
很抱歉,作为AI语言模型,我无法直接对数据库进行操作,但我可以提供一些思路和SQL语句供您参考。
1、创建视图View_student:
```
CREATE VIEW View_student AS
SELECT * FROM Student WHERE major = '计算机软件';
```
2、创建视图View_student_male:
```
CREATE VIEW View_student_male AS
SELECT s.sid, s.name, sc.cno, sc.grade
FROM Student s, StuCou sc
WHERE s.sid = sc.sid AND s.major = '计算机软件' AND s.gender = '男';
```
3、创建视图View_student_avg:
```
CREATE VIEW View_student_avg AS
SELECT sid AS '学号', AVG(grade) AS '均分'
FROM StuCou
GROUP BY sid;
```
4、查询平均成绩在80以上的学生:
```
SELECT * FROM View_student_avg WHERE 均分 >= 80;
```
5、插入一条记录并比较变化:
```
-- 插入前
SELECT * FROM View_student;
INSERT INTO Student VALUES ('2021001', '张三', '男', '计算机软件');
-- 插入后
SELECT * FROM View_student;
-- 插入前
SELECT * FROM View_student_avg;
INSERT INTO StuCou VALUES ('2021001', '101', 90);
-- 插入后
SELECT * FROM View_student_avg;
SELECT * FROM StuCou;
```
如果插入的记录的专业与视图不同,则插入前后视图和基本表的数据无变化。如果一定要删除View_student中“刘丽”的记录,需要使用DELETE语句,但这会同时删除基本表中的记录,可能会影响其他视图的数据。如果只想删除View_student中的记录,可以使用INSTEAD OF DELETE触发器来实现。
阅读全文