SQL Server数据库-视图(虚拟表)
视图:两大优点
第一种:隐藏字段(隐藏敏感数据)
第二种:简化查询
为什么需要视图
不同的人员关注不同的数据
保证信息的安全性
什么是视图
视图是一张虚拟表
1.表示一张表的部分数据或多张表的综合数据
2.其结构和数据是建立在对表的查询基础上
视图中不存放数据
数据存放在视图所引用的原始表中
一个原始表,根据不同用户的不同需求,可以创建不同的视图
视图的用途
1.筛选表中的行
2.防止未经许可的用户访问敏感数据
3.降低数据库的复杂程度
4.将多个物理数据库抽象为一个逻辑数据库
视图注意
我的理解:
视图表只提供查操作,但是也有例外。
视图多张表的时候是不提供 添加。删除、修改
但是视图单张表的时候可以
使用视图注意事项
A.视图中可以使用多个表
B.一个视图可以嵌套另一个视图
C.视图定义中的 SELECT 语句不能包括下列内容:
1.ORDER BY 子句,除非在 SELECT 语句的选择列表中也有一个 TOP 子句
2.INTO 关键字
3.引用临时表或表变量
如何创建视图
一、使用管理器创建视图
二、使用T-SQL语句创建视图
创建视图-语法
CREATE VIEW view_name AS <SELECT 语句>
修改视图-语法
ALTER VIEW view_name
AS
<SELECT 语句>
删除视图-语法
IF EXISTS (SELECT * FROM sysobjects WHERE name = 'view_name') DROP VIEW view_name
WHERE name = 'view_name' --需要使用一对单引号括起
查看视图-语法
SELECT * FROM view_name
修改一个视图
alter view v_GetStudent as select a.stuno as stuid,a.stuname,b.ClassName from Students a inner join ClassInfos b on(a.classId=b.ClassId)
查询刚才创建的视图
select * from v_GetStudent
视图嵌套创建
create view v_GetResult as select *from v_GetStudent a inner join Results b on(a.stuid=b.stuno)
创建一个“v_GetResult”视图,这个视图里面的数据用的是视图表“v_GetStudent”别名是“a”和实体表“Results”别名是“b”里面的数据,并且a.stuid等于b.stuno
课堂笔记
--做金融服务业(提供银行货币汇率、贵金属金价、银价) --不能直接接触数据,更接触不到服务器 --API开发文档(存储过程名字、视图名字) --数据库字段,敏感 --难受(没有任何文档,第二程序和数据库结构很乱) --视图:两大优点 --第一种:隐藏字段(隐藏敏感数据) --第二种:简化查询 --查询学员信息和班级信息 --简化查询,创建视图 --视图:虚拟表 --create database 数据库名字 创建任何结构 --create table 表名 --create view 视图名 --alter 修改 alter view v_GetStudent as select a.stuno as stuid,a.stuname,b.ClassName from Students a inner join ClassInfos b on(a.classId=b.ClassId) select * from v_GetStudent create view v_GetResult as select *from v_GetStudent a inner join Results b on(a.stuid=b.stuno) select * from v_GetResult select *from v_GetStudent --v_GetStudent当成一张表使用 insert into v_GetStudent --不能是多张表 --对视图进行添加。删除、修改,是会影响原来的物理表 --into克隆表结构 变量也不能使用 alter view v_classinfos --不是正常英文单词v_classinfos as select top 10 ClassId, ClassName, Remark from classinfos order by ClassId select * from v_classinfos insert into v_classinfos(ClassName,remark) values('测试班级2','备注内容sss') --视图数据都是来源于 物理表 select * from v_GetStudent order by stuid delete v_GetStudent --视图中不能使用order by --数据库名..bank select * from BankDB..bank --QQ 腾讯 一个用户一个库 select *from ClassInfos
qq:527592435