SQL Sever视图的创建及使用

236 阅读3分钟

视图的特点:

  • 是从一个或几个基本表(或视图)导出的虚表。
  • 只存放视图的定义,不存放视图对应的数据。
  • 基表中的数据发生变化,从视图中查询出的数据也可能随之改变。

建立视图

语句格式

       CREATE  VIEW  <视图名>  [(<列名>  …)]
       AS  <子查询>
       [ WITH  CHECK  OPTION ];

组成视图的属性列名:全部省略或全部指定
With check option:要求对视图的更新操作必须满足子查询中的where条件。

基本视图

例:建立IS系学生的视图IS_Student1 。

CREATE  VIEW  IS_Student1
        AS 
        SELECT  Sno,Sname,Ssex,Sage
        FROM   Student
        WHERE   Sdept= 'IS'

建立IS系学生的视图IS_Student2 ,并要求对视图进行修改和插入操作时仍需保证该视图只有IS系的学生 。

CREATE  VIEW  IS_Student2
        AS 
        SELECT  Sno,Sname,Ssex,Sage
        FROM  Student
        WHERE   Sdept= 'IS'
        WITH  CHECK  OPTION;

基于多个基表的视图

建立IS系选修了1号课程的学生视图IS_S1。

CREATE  VIEW  IS_S1(Sno,Sname,Grade)
        AS 
        SELECT Student.Sno,Sname,Grade
        FROM  Student,SC
        WHERE  Student.Sno=SC.Sno  AND
                        Sdept= 'IS'  AND   SC.Cno= '1'

基于视图的视图

建立IS系选修了1号课程且成绩在90分以上的学生的视图IS_S2

CREATE VIEW IS_S2
        AS
        SELECT Sno,Sname,Grade
        FROM  IS_S1
        WHERE  Grade>=90

带表达式的视图

定义一个反映学生出生年份的视图BirthYear_S。

CREATE  VIEW  BirthYear_S(Sno,Sname,Sbirth)
        AS 
        SELECT  Sno,Sname,2021-Sage
        FROM  Student;

分组视图

将学生的学号及他的平均成绩定义为一个视图S_G

CREATE  VIEW S_G(Sno,Gavg)
             AS  
             SELECT Sno,AVG(Grade)
             FROM  SC
             GROUP BY Sno;

注:
同一数据库中,所有对象的名字都不要相同(即:不要有重名)。

  • 除了不可以有同名视图外(即:不可以与其他视图重名),也不能与表重名。
  • 反过来,新建表时,除了不可以与其他表重名外,也不能与视图重名。

删除视图

语句的格式:

DROP  VIEW  <视图名列表>
  • 该语句从数据字典中删除指定的视图定义。
  • 如果该视图上还导出了其他视图,则不能删除。
  • 删除基本表时,由该基本表导出的所有视图定义都必须显式地使用DROP VIEW语句删除。 例: 删除视图BT_S:
  DROP VIEW BT_S;

create   view   v1  as   select   *   from   s
create   view   v2  as   select   *   from   v1 
drop  view  v1

之后
视图v2还在
但视图不能用了

CREATE VIEW q12   as   select q1,q2   from t1   
CREATE VIEW q123  as   select  q1   from q12 
drop table t1

之后
删除表t1,没有报错
视图都还在,但视图不能用了

查询视图

用户角度:查询视图与查询基本表相同 例:在IS系学生的视图IS_Student中找出年龄小于20岁的学生。

SELECT   Sno,Sage
        FROM    IS_Student
        WHERE   Sage<20

查询选修了1号课程的IS系学生学号和姓名

SELECT  IS_Student.Sno,Sname
        FROM     IS_Student,SC
        WHERE  IS_Student.Sno =SC.Sno 
                AND SC.Cno= '1'

更新视图

  • 由于视图数据来自基本表,所以对视图的更新实际上是对基本表的更新。
  • 一般不允许通过视图更新基本表。
alter  view   v_name
as
select ......

T-SQL语句创建男生视图V_Stu:学号、姓名、性别。

create view V_Stu as select 学号,姓名,性别 from student where 性别='男'

T-SQL修改以上视图为女生视图 。

alter view V_Stu as select 学号,姓名,性别 from student where 性别='女'

视图的作用

  1. 视图能够简化用户的操作。
  2. 视图使用户能以多种角度看待同一数据 。
  3. 视图能够对机密数据提供安全保护。
  4. 适当的利用视图可以更清晰的表达查询。