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

 

posted @ 2019-03-06 10:36  橙-极纪元JJYCheng  阅读(1391)  评论(0编辑  收藏  举报