实验八 视图(V2.0)

来源:互联网 发布:linux的cut命令 编辑:程序博客网 时间:2024/03/29 07:38

实验  视图

一、实验目的:

1.了解视图的概念和与基本表的区别。

2.掌握SQL创建视图的方法。

3.掌握视图更新与基本表更新的相关性

 

4.

二、实验内容

1.基本知识

创建视图的命令

1) create view <视图名>

2) as

3) select <目标列>

4) from <表名列表>

5) [where 查询条件]

6) [group by 分组数据 having 分组筛选条件]

7) [with check option]

 

说明:

1) 视图名的起名规则,遵循标识符的命名规则。

2) 子查询的查询结果为视图。视图是查询的定义,数据存储在基本表,所以视图是虚表。

3) 子查询不能进行排序所以没有Order by子句。

4) 当使用with check option子句时,将会在更新视图时,强制附加where条件的内容。

 

2.创建视图

实验1:创建CS系学生信息视图CS_VIEW

 

 

 

命令:

create view CS_VIEW
as
select *
from student
where sdept = 'CS'
with check option;

 

完成实验:创建视图后,更新基本表(更新200215121学生的年龄为21岁),重新查看视图内数据,有没有更新?将用到的命令、测试过程和说明的问题记录清楚。

 

会更新。说明视图只是定义,不保存数据,数据来源于基本表,视图的数据来源于基本表。视图是个虚表,不占用存储空间。

  

实验2:创建数据库课程学生成绩单。

DS_GRADE(学号,姓名,成绩)

 

 

说明:视图可以来源于多个表。

注意:视图也可以在视图的基础上进行创建。

 

实验3:创建一个各系学生人数统计视图。SDEPT_VIEW(系名,人数)

Create view sdept_view

As 

Select sdept 系名,count(*) 人数

From student

Group by sdept

 

 

 

视图的创建可以使用分组和聚集函数,使用户只能看到统计结果,不能看到明细,体现了数据的安全性。

 

3.修改数据更新视图

 

实验4:通过CS_View更新CS系学生的年龄增加1岁。

 命令:

update CS_VIEW
set sage = sage + 1;

命令能够执行,查看基本表和视图数据是否已更新。基本表数据更新了吗?视图数据更新了吗?

 

实验5:更新DS_GRADE视图内200215121学生的成绩为85.

命令:update DS_GRADE

             set grade = 85

             where sno = '200215121'

 

结果:命令成功?还是不成功?为什么?

 

 

4.插入数据更新视图

实验6:插入一学生(200215126,张三,男,20)到CS_VIEW视图。

 命令:

insert into cs_view
values('200215126','张三','男',20)

 

 

查看基本表student和CS_VIEW视图,有什么情况?

基本表内能够查询到,而CS_View视图内,没有

 

说明:

1.在创建视图CS_VIEW时,没有加可选子句with check  option,通过视图插入的数据不经过视图where子句检验,插入的数据不满足sdept为CS也没有问题,所以这个没有sdept的值(为NULL)数据能够插入(到基本表),而视图内看不到不是CS系的学生数据。

2.如果在创建CS_VIEW时,使用了with check  option子句,则通过视图插入数据时,需要检验数据是否为CS系的数据(满足提高安全性的要求),如果满足则能够插入,否则不允许插入。

注意:

在定义视图时With check option的作用。 

 

命令7:插入('200215127','李四',87)到视图DS_GRADE。

命令?

执行情况?

 

实验8:插入(’ABC’,1)到SDEPT_VIEW视图。

 

 

命令是?

 

能够插入吗?

 

 

四、总结:

0.创建视图的几种形式。

 

1.视图可以从基本表导出,也可以从视图导出。

 

2.视图不保存数据,数据保存在基本表中。

 

3.更新基本表,视图数据会发生变化;成功更新视图,基本表也会发生变化。

 

4.更新视图不成功的情况很常见。不能满足创建视图where条件的更新不能够更新;有多个表或视图导出的视图不能够更新;有group by或聚集函数的视图不能够更新。