目录
前言
一、视图的概述
1、视图的定义
2、视图的优点
3、视图的分类
4、视图和表的区别
二、视图的基本操作
1、创建视图
2、修改视图
3、操作视图
4、删除视图
本文有参考自
数据库是由数据库设计员,根据用户的所有需求,按照数据库设计规范设计的,但根据数据库设计规范设计的数据库并不一定符合用户的应用需求。而 SQL SERVER根据不同用户的应用需求,重新定义了表的数据结果,这种结构就是视图。
数据库中的视图是一个虚拟表。同真实的表一样,视图包含一系列带有名称的列和行数据,行和列数据用来自由定义视图和查询所引用的表,并且在引用视图时动态产生。
视图是从一个或者多个表导出的,它的行为与表非常相似,但视图是一个虚拟表,在视图中可以使用SELECT语句查询数据,以及使用insert、update和delete语句修改记录,对于视图的操作最终转化为对基本数据表的操作。视图不仅可以方便操作,而且可以保障数据库系统的安全性。
视图一经定义便存储在数据库中,与其相对应的数据并没有像表数据那样在数据库中在存储一份,通过视图看到的数据只是存放在基本表中的数据。可以对其进行增删该查,通过视图对数据修改,基本表数据也对应变化,反之亦然。
SQL SERVER 中,视图可以分为 标准视图、索引视图 和分区视图。
SQL SERVER 提供了 CREATE VIEW 命令来创建视图。
-- 语法格式
CREATE VIEW view_name
AS
SELECT column_name FROM table_name ... /* 定义视图的 SELECT语句 */
[ WITH CHECK OPTION ]
-- 定义视图的 SELECT语句:可以使用多个表或其它视图。
-- WITH CHECK OPTION:可选项,表示在执行所有数据修改语句时,都必须符合由 定义视图的 SELECT语句 设置的准则。
-- 示例:创建名为 s_c_sc 的视图,包括计算机专业的学生的学号、姓名,以及他们的选修课程号、课程名和成绩。
create view s_c_sc
as
select student.sno, sname, course.cno, cname, score
from student, sc, course
where student.specialty = '计算机' and student.sno = sc.sno and sc.cno = course.cno
go
-- 示例:创建名为 acc_count 的账户统计视图,求每个存户的账户个数,要求包括身份证号和姓名。
create view acc_count
as
select depositor.IDNO, Dname, count(*) as number
from depositor, account
where depositor.IDNO = account.IDNO
group by depositor.IDNO, Dname
go
SQL SERVER 中,使用 ALTER VIEW 命令来修改视图。
-- 语法格式
ALTER VIEW view_name
AS
SELECT column_name FROM table_name ... /* 定义视图的 SELECT语句 */
[ WITH CHECK OPTION ]
-- 示例:修改视图 acc_count,求每个储户的账户个数和总存款余额,要求包括身份证和姓名。
alter view acc_count
as
select depositor.IDNO, Dname, count(*) as number, sum(balance) as sumbalance
from depositor, account
where depositor.IDNO = account.IDNO
group by depositor.IDNO, Dname
go
-- 示例:在视图上创建视图:创建 Few_Balance 余额统计视图,求总存款余额少于5000 的储户信息,包括身份证号码、姓名 和手机号。
create view Few_Balance
as
select depositor.IDNO, depositor.Dname, Telephone
from acc_count, depositor
where acc_count.IDNO = depositor.IDNO and SumBalance < 5000
go
注:视图的本质就是一张表,只是虚拟表而言,也可以使用视图跟表进行关联,就像表与表之间的关联一样。
使用视图时,跟操作表一样,使用 SELECT、INSERT、UPDATE、DELETE 命令进行操作。
查看视图:
-- 示例:在视图 s_c_sc中,统计 C++ 语言课程的总分和平均分。
select sum(score) 总分, avg(score) 平均分
from s_c_sc
where cname = 'C++语言'
-- 示例:在视图 acc_count 中,查看储户李华的统计信息。
select * from acc_count
where Dname = '李华'
更新视图:
-- 示例:通过视图 male_view,向 student表中插入数据。
insert into view male_view
values
( '201501005', '张三' , '男', '1997-8-1', '2015-9-6', '电子信息', '2015级' )
-- 示例:如果希望用户不通过视图 male_vbu 插入女生信息,可以在创建视图时,使用 WITH CHECK OPTION 选项。
create view male_vbu
as
select sno, sname, ssex, birthday, en_time, specialty, grade
from student
where ssex = '男'
WITH CHECK OPTION
在 SQL SERVER 中,删除视图使用 DROP VIEW 命令。
-- 语法格式
DROP VIEW 视图名称
-- 示例:删除视图 s_c_sc。
drop view s_c_sc
go
若有不足之处,欢迎各位大佬斧正。
上一篇:app 云数据库_app
下一篇:实验15.多线程调度