视图.docx
《视图.docx》由会员分享,可在线阅读,更多相关《视图.docx(13页珍藏版)》请在冰豆网上搜索。
视图
第八章视图及其应用
一、视图综述
1、定义
(1)从一个或多个表中导出的表(所涉及的表称为基表)。
它是一个虚拟表,其内容由查询语句定义生成。
(2)视图的内容生成:
a)基表的投影或选择
b)两个或多个基表的连接
c)基表和视图的组合
2、分类
●标准视图——具有结构和数据,包含一系列带有名称的列和行数据。
●分区视图——在一台或多台服务器间水平连接一组成员表中的分区数据。
●索引视图——带存储数据的视图。
3、作用
●集中数据,满足不同用户对数据的不同要求。
●简化复杂查询的结构
●对数据提供安全保护
●便于组织数据导出
●跨服务器组合分区数据
4、缺点:
当更新视图中的数据时,实际上是对基本表的数据进行更新。
当从视图中插入或者删除时,情况也是这样。
然而,某些视图是不能更新数据的。
二、视图的操作
操作名称
T-SQL
备注
创建视图
CREATEVIEW视图名
ASSELECT_statement
1、创建视图应该注意的问题
●只能在当前数据库中创建视图
●在一个视图中最多引用1024列,视图中记录的行数限制由基表中记录数目决定。
●视图名称符合命名规则
●视图中的列名一般继承及表中的列名
●可以在视图上创建视图
●不能在临时表上创建视图,也不能创建临时视图。
●定义视图的查询语句中不能包含ORDERBY,COMPUTEBY子句和INTO关键字。
视图的使用
通过视图查数据
SELECT*FROM视图文件
通过视图改数据
插入新记录
INSERTINTO表VALUES值
通过视图修改数据注意:
●如果修改由2个或以上基表得到的视图,必须进行多次修改,每次修改只能影响一个基表;
●不能修改那些通过计算得到结果的列
●在基表的列中修改的数据必须符合列的约束条件。
修改
UPDATE视图名SET修改的内容
删除
DELETEFROM视图名称WHERE条件
视图的修改
重命名
SP_RENAME原来名字,新名字
修改视图定义
ALTERVIEW视图名ASSELECT
视图定义信息的查询
EXECSP_HELPTEXT视图名
视图的删除
DROPVIEW视图名
例题1创建一个视图v_成绩1,可以查看班级代码为'010101001'班的学生的学号,姓名,课程名,成绩。
(学生A,课程注册B,课程C)
usestudent
go
CREATEVIEWv_成绩1
ASSELECTA.学号,A.姓名,C.课程名,B.成绩
FROM学生ASA
JOIN课程注册ASBONA.学号=B.学号
JOIN课程ASCONB.课程号=C.课程号
whereA.班级代码='010101001'
go
例题2视窗操作创建一个视图“v_成绩2”,可以查看全体学生的学号,姓名,课程名,成绩。
例题3以“v_成绩2”为试图基础,创建“V_某班成绩汇总”视图,使用此视图可以查询学生的学号、姓名、和总成绩。
usestudent
go
CREATEVIEWv_成绩汇总
ASSELECT学号,姓名,sum(成绩)as总成绩
FROMv_成绩2
groupby学号,姓名
go
例题4查看视图“v_成绩2”中的信息。
usestudent
go
SELECT*
FROMv_成绩2
go
例题5为视图“v_成绩2”中添加一条记录。
INSERTINTOv_成绩2VALUES(大学物理,90,001012002010,张明)
例题6改名
SP_RENAMEV_成绩,V_成绩
Go
例题7对于视图“v_成绩1”中的条件修改为:
性别为女。
usestudent
go
ALTERVIEWv_成绩
asselectA.学号,A.姓名,C.课程名,B.成绩
FROM学生ASA
JOIN课程注册ASBONA.学号=B.学号
JOIN课程ASCONB.课程号=C.课程号
whereA.性别='女'
go
三、练习题
1.在STUDENT库中以“学生”表为基础,建立一个名为“V_经济管理系学生”的视图(注:
经济管理系的系部代码为“02”)。
在使用该视图时,将显示“学生”表中的学号,姓名,性别,出生日期,专业代码,系部代码。
2.使用视图“V_经济管理系学生”查询“专业代码”为“0102”的学生的姓名,学号,专业代码。
usestudent
go
select学号,姓名,专业代码
fromV_经济管理系学生
where专业代码='0102'
go
3.向视图“V_经济管理系学生”中添加数据(‘010*********’,‘张三’,‘女’,’02’)
usestudent
go
insertintoV_经济管理系学生
values('张三','010101001110','女','','','02')
go
4、修改视图“V_经济管理系学生”中,将学号为‘010*********’的出生日期改为1988-12-12
usestudent
go
updateV_经济管理系学生
set出生日期='1988-12-12'where学号='010101001005'
go
5.视图“V_经济管理系学生”中,删除学号为‘010*********’的学生信息。
usestudent
go
deletefromV_经济管理系学生
where学号='010101001001'
go
6.在查询分析器中使用更改视图的命令将视图“V_经济管理系学生”更名为“V_经管系男生”。
usestudent
go
sp_renameV_经济管理系学生,V_经管系男生
go
7.修改“V_经管系男生”视图的内容。
视图修改后,在使用该视图时,将得到经济管理系所有“男”学生的信息。
usestudent
go
select*fromV_经管系男生
where性别='男'
go
8.删除视图“V_经管系男生”。
usestudent
go
dropviewV_经济系男生
go