实验八 视图(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
as
select *
from student
where sdept = 'CS'
with check option;
会更新。说明视图只是定义,不保存数据,数据来源于基本表,视图的数据来源于基本表。视图是个虚表,不占用存储空间。
实验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视图。
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视图。
4.更新视图不成功的情况很常见。不能满足创建视图where条件的更新不能够更新;有多个表或视图导出的视图不能够更新;有group by或聚集函数的视图不能够更新。
- 实验八 视图(V2.0)
- 实验七 嵌套查询(V2.0)
- 实验九 数据库完整性实验(V2.0)
- 实验十一 连接数据库实验(V2.0)
- 实验五 单表查询(V2.0版)
- 实验六 多表查询(V2.0)
- SQL2005视图(八)--视图索引
- 实验十 数据库设计(V2.0)
- jz2440内存实验(八)
- 八、视图
- 八皇后问题v2
- 实验八
- 实验八
- 实验八
- 实验八 排序实验
- IOS入门学习(八):表视图
- UML视图(八)构件图
- Mysql入门(八)之视图
- 荷兰国旗问题
- SNMPv3认证和加密过程
- Node.js 究竟是什么?
- Java IO 图解
- STM32中断优先级
- 实验八 视图(V2.0)
- asp.net Chart的使用介绍
- 链接大全
- OpenCL用于计算机领域的13个经典案例
- W3School Jquery测验
- 如何在myseclipse中修改Servlet模板
- for语句小练
- 关于JavaScript中apply与call的用法意义及区别(转)
- 制作头顶人物姓名