(五)数据库视图
来源:互联网 发布:vivo软件 编辑:程序博客网 时间:2024/05/21 22:27
视图是从一个或几个基本表(或视图)导出表。它与基本表不同,它是一个虚表。数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。所以基本表中的数据发生变化,从视图中查询出的数据也就随之改变了。从这个意义上讲,视图就像一个窗口,透过它就可以看到数据库中自己感兴趣的数据及其变化。
一、定义视图
1.建立视图
CREATE VIEW <视图名>[(<列名>[,<列名>]……)]AS <子查询>[WITH CHECK OPTION];
其中,子查询可以是任意复杂的SELECT 语句,但通常不充许含有ORDET BY 子句和 DISTINCT 短语。
WITH CHECK OPTION 表示对视图进行UPDATE,INSERT和DELECT操作时要保证更新、插入或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)。
组成视图的属性列名或者全部省略或者全部指定,没有第三种选择。如果省略了视图的各个属性列明,则隐含该视图由子查询中SELECT 子句目标中的诸字段组成。但下列三种情况必须明确指定组成视图的所有列名:
(1)某个目标列不是单纯的属性名,而是聚集函数或列表达式;
(2)多表连接时选出了几个同名列作为视图的字段;
(3)需要在视图中为某个列启用新的更合适的名字
建立信息系学生的视图
CREATE VIEW IS_StudentASSELECT Sno,Sname,SageFROM StudentWHERE Sdept='IS';
CREATE VIEW IS_Student /*后面要使用该视图*/ASSELECT Sno,Sname,SageFROM StudentWHERE Sdept='IS'WITH CHECK OPTION;
由于在定义IS_Student视图时加上WITH CHECK OPTON 子句,以后对该视图进行插入、修改和删除操作时,RDBMS会自动加上Sdept=’IS'的条件。当建立在多个基本表时;
建立信息系选修了1号课程的学生的视图。
CREATE VIEW IS_S1(Sno,Sname,Grade)ASSELECT Student.Sno,Sname,GradeFROM Student,SCWHERE Sdept='IS'AND Student.Sno=SC.Sno AND SC.Cno='1';
将学生的学号及他的平均成绩定义为一个视图。
CREATE VIEW S_G(Sno,Gave)ASSELECT Sno,AVG(Grade)FROM SCGROUP BY Sno;
2.删除视图
该语句的格式为:DROP VIEW <视图名>[CASCADE];
视图删除后视图的定义将从数据字典中删除。如果该视图上还导出了其它视图,则使用CASCADE级联删除语句,把该视图和由它导出的所有视图一起删除。
二、查询视图
在信息系学生的视图中找出年龄小于20岁的学生。
SELECT Sno,SageFROM IS_StudentWHERE Sage<20;
本例转换后的查询语句为:
SELECT Sno,SageFROM StudentWHERE Sdept='IS'AND Sage<20;
三、更新视图
由于视图是不实际存储数据的虚表,因此对视图的更新,最终要转换对基本表的更新。
将信息系学生视图IS_Student中学号为14042401的学生姓名改为“刘成”。
UPDATE IS_StudentSET Sname='刘成'WHERE Sno='14042401';转换后的更新语句为:
UPDATE StudentSET Sname='刘成'WHERE Sno='14042401' AND Sdept='IS';
向信息系学生视图IS_Student 中插入一个新的学生记录,其中学号为14042405,姓名为赵新,年龄为20岁。
INSERT INTO IS_StudentVALUES('14042405','赵新',20);转换对基本表的更新:
INSERTINTO Student(Sno,Sname,Sage,Sdept)VALUES('14042405','赵新',20,'IS');
删除信息系学生视图IS_Student 中学号为14042405的记录。
DELETEFROM IS_StudentWHERE Sno='14042405';转换为对基本表的更新:
DELETE FROM StudentWHERE Sno='14042405'AND Sdept='IS';
四、视图作用
1.视图能够简化用户操作;
2.视图使用户能以多种角度看待统一数据;
3.视图对重构数据库提供了一定程度的逻辑性;
4.视图能够对机密数据提供安全保护;
5.适当的利用视图可以更清晰的表达查询。
1 0
- (五)数据库视图
- 【转】数据库基本知识:(五)视图应用
- Oracle数据库学习(五)--视图,序列,索引,约束
- mysql(五)视图
- yii-besic (五)视图
- ORACLE基础(五)------ 视图
- 数据库视图(oracle)
- 数据库视图(oracle)
- 数据库视图(二)
- 数据库查询的五种视图和作用
- 数据库视图(普通视图和物化视图)
- SpringMVC学习(五) 视图和视图解析器
- UML视图(五)活动图
- MySQL基础笔记(五) 视图
- MySQL(五)视图的操作
- MySQL基础笔记(五) 视图
- Qt图形视图框架(五) 变换
- 数据库笔记(五)
- js 判断滚动条是否到达底部
- 输入两个日期,使用Calendar来表示时间,并计算两个日期之间相隔的天数
- jquery操作checked属性以及disabled属性的多种方法
- Excel用线程池 创建很多行并填充内容,解决TreeMap的java.util.ConcurrentModificationException
- 如何安装atom
- (五)数据库视图
- Android--SQLite适配器
- (转)浅说深度学习:核心概念
- android5.1 取消录制屏幕跳出的权限对话框
- 【bzoj4552】 [Tjoi2016&Heoi2016]排序
- nyoj128 前缀式计算 (strtok分割字符串+递归)
- [学习笔记]将http网页用tomcat转为https
- git如何切换分支
- 迭代法求x=sqrt(a)