zoukankan      html  css  js  c++  java
  • Sql Server的艺术(一) 视图的增删查改

      视图是从一个或者多个表中查询数据的另一种方式。利用视图可以集中、简化定制数据库,同时还能保障安全。

      视图其结构和数据是建立在对应的查询基础上的。和表一样,视图也是包括几个被定义的数据列和多个数据行,但本质而言,这些数据列和数据行来源于他所引用的表。所以试图不是真是存在的基础表,而是一张虚表。我们也可以对师徒中的数据进行增删查改(有一定限制)。

      当然视图也有一定的优缺点:

      ● 简单性。视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使用户不必为以后的操作每次都指定全部的条件。
      ● 安全性。通过视图用户只能查询和修改他们所能见到的数据。数据库中的其他数据则既看不见也取不到。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定的列上。通过视图,用户可以被限制在数据的不同子集上。
      ● 逻辑数据独立性。视图可以使应用程序和数据库表在一定程度上独立。如果没有视图,应用一定是建立在表上的。有了视图之后,程序可以建立在视图之上,从而程序与数据库表被视图分割开来。


      视图也存在一些缺点,主要如下。
      ● 性能:SQL Server必须把视图的查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,即使是视图的一个简单查询,SQL Server也把它变成一个复杂的结合体,需要花费一定的时间。
      ● 修改限制:当用户试图修改视图的某些行时,SQL Server必须把它转化为对基本表的某些行的修改。对于简单视图来说,这是很方便的,但是,对于比较复杂的视图,可能是不可修改的。

      一、为整表创建视图并查看其信息

    --------创建一个与Student表对应的视图
    CREATE VIEW Student_view
    AS
    select * from Student
    
     --------查询这个视图
    select * from student_view

      二、为视图创建视图并查看其信息

    --------为Student_view视图创建一个所有男同学的视图Boy_View
    create view Boy_View
    as
    select * from Student_view where Ssex=''
    
     --------查询这个视图
    select * from Boy_View

       

      三、为列创建视图并查看其信息

    --------为列创建视图并查看其信息
    create view NameAge_View
    as
    select Sname,Sage from Student
    
     --------查询这个视图
    select * from NameAge_View

      四、为表创建具有不同字段名的视图并查看其信息

    --------为表创建具有不同字段名的视图并查看其信息
    --------Student表中所有男同学的姓名和性别
    CREATE VIEW NewCloumnName_View(Name,Age)
    AS
    select Sname,Ssex from Student
    where Ssex=''
    
     --------查询这个视图
    select * from NewCloumnName_View

       五、为表创建具有不同字段名的视图并查看其信息

    --------利用视图简化表的链接
    --------Student,Teacher,Course表关联显示,学生的语文成绩
    CREATE VIEW join_View(XM,KC,CJ)
    AS
    select Sname,Cname,score from Student,Course,Sc
    where  Sc.S#=Student.S#
    and Sc.C#=Course.C# and Course.Cname='语文'
    
     --------查询这个视图
    select * from join_View

       六、修改视图

    -------修改join_View视图中的数据
    ---------将王五同学的成绩改成999999
    update join_View set CJ='999999' where XM='王五'
    
     --------查询这个视图
    select * from join_View     -----数据已经变为999999
    --------查询原表数据
    select Sname,Cname,score from Student,Course,Sc
    where  Sc.S#=Student.S#
    and Sc.C#=Course.C# and Course.Cname='语文'    -----数据已经变为999999

       网上有些人说,视图只能查看删除,不能修改,但是个人实际操作发现,修改后,原表数据会跟着修改。

      对于以上就是对视图的讲解基本操作,其中AS 后面的SQL语句是可以添加任意条件查询的,复杂查询就不做操作了,可以自行扩展。

      七、删除销毁视图

    DROP VIEW join_View

       删除视图对实际表中的数据是不会有影响的。

      八、视图的存放位置

      

       九、注意事项

      

      使用视图的几点原则:

    1. 和表一样,视图也有唯一的名字。不仅视图之间不允许 有相同的名字,并且视图与表业不允许拥有相同的名字。
    2. 视图的创建 个数不受限制,用户可以创建任意多个视图。
    3. 用户要创建试图,必须从数据库管理员那里得到权限。
    4. 视图可以嵌套,即可以创建视图的视图。(也就是第二条)
    5. 一些数据库管理系统(SQL Service)禁止用户在查询语句中使用Order By字句。(也就是第九条)
  • 相关阅读:
    Codeforces 919D:Substring(拓扑排序+DP)
    初学Javascript,写一个简易的登陆框
    学习数据结构之线性表
    用python实现的简易记牌器的demo
    Multiism四阶巴特沃兹低通滤波器的仿真实现
    用python来抓取“煎蛋网”上面的美女图片,尺度很大哦!哈哈
    用Python爬虫爬取“女神吧”上的照片。
    在linux操作系统上进行简单的C语言源码的gcc编译实验
    想学习linux操作系统,于是选择了在win8 虚拟机VM player 里装了Linux版本Centos7
    通过python的urllib.request库来爬取一只猫
  • 原文地址:https://www.cnblogs.com/liuchenxing/p/8251932.html
Copyright © 2011-2022 走看看