SQL语法整理[4]——视图

来源:互联网 发布:h5页面源码 编辑:程序博客网 时间:2024/06/03 13:36
 

SQL语法整理[4]——视图

     视图是一个逻辑的概念,也称之为虚拟的表,对于外部的用户而言,视图与表的结构一样被使用.使用视图主要是为用户提供一个快捷的访问方法,或者屏蔽用户对真实数据源直接访问.视图中实际上封装的仅仅是一些SELECT查询语句,而并非真实的数据,所以被称之为虚拟的表。作为虚拟的表仍然有表的一些属性,对表中数据的添加、修改、删除一样可以作用于虚拟表,即视图上。

     视图也被称为虚拟的表,其内容由SELECT查询语句定义。同真实的表一样,视图包含了一系列带有名称的列和行的数据。但是,视图并不在数据库中以存储的数据集合形式存在。用行和列的数据,来自由定义视图的查询所引用的表,并且在引用视图时动态生成。视图一经定义,便存储在数据库中,与其相对应的数据并没有像表那样又在数据库中再存储一份。通过视图看到的数据只是存放在基表中的数据。对视图的操作与对表的操作一样,可以查询、修改、删除。通过对视图看到的数据进行修改时,相应的基表的数据也要发生变化,同时,若基表的数据发生变化,这种变化也可以自动地反映到视图中。

视图和查询最主要的差别是:视图的存储是作为数据库开发者设计数据库的一部分;而查询仅仅是对表的查询并非数据库设计的一部分。

 

创建一个能同时反映学生与老师信息的视图。

/*创建名称为v_student_teacher的视图*/

USE   school

GO

CREATE  VIEW     v_student_teacher

AS

SELECT    s.id       AS   'student_id',

s.name    AS   'student_name',      ----学生姓名

s.gender   AS   'student_gender',     ----学生性别

s.age      AS   'student_age',        ----学生年龄

s.grade,                              ----学生年级

s.class,                              ----学生班级

s.teacher_id  AS   's_teacher_id',     ----老师编号

s.parents_id,                         ----父母编号

t.id        AS    'teacher_id',         ----老师编号

t.name     AS    'teacher_name',     ----老师姓名

t.gender    AS    'teacher_gender',    ----老师性别

t.age      AS    'teacher_age',        ----老师年龄

t. subject,                             ----所教的学科

t. teaching_age,                       ----教学年龄

t. position,                            ----工作岗位

t. salary                              ----岗位工资

FROM  student    AS    s

INNER   JOIN

teachers    AS    t    ON    s.teacher_id = t.id

GO

/*使用视图*/

USE   school

GO

SELECt  * FROM v_student_teacher

GO

 

创建视图

CREATE VIEW view_name

AS                   

select_statement

 

/*建立简单视图v_student*/

USE  school

GO

---创建视图v_student

CREATE     VIEW    v_student    AS

SELECT * FROM student

GO

<基表变化则试图将发生相应的变化>

 

通过视图修改数据

通过更新视图数据(包括添加、修改和删除)可以修改基本表数据。但并不是所有的视图都可以更新,只有对满足可更新条件的视图才能进行更新。

任何修改(包括UPDATE、INSERT和DELETE语句)都只能引用一个基本表的列(要修改的列必须属于视图定义中的同一个基表)。

即使是可更新视图,也不能随意更新数据。如果视图所依赖的基本表有多个时,不能向该视图添加数据,因为这将影响多个基本表。

向可更新视图中添加数据时,系统会按照添加记录的键值所属的范围,将数据添加到其键值所属的基本表中;修改数据时,若视图依赖于多个基本表,那么一次只能修改一个基本表中的数据;删除数据时,若视图依赖于多个基本表,就不能通过视图删除数据。

 

通过视图添加数据

INSERT INTO view_name(column_name…)

VALUES(value1,value2,…)///基本表也发生了相应的变化

 

INSERT   INTO    v_student_teacher

(student_id,student_name,student_age,graduation,cardno)

VALUES                          ///未指定的列都赋值为NULL。。

(2006013,'小明',24,'已毕业','220200030304304042')

GO

 

通过视图更改数据

在视图使用了多个底层基表联接的情况下,每次更新操作只能来自某一个基表中的数据列的值。

语法:

UPDATE view_name

SET column_name1=<values>

WHERE column_name2=<values>

 

通过视图删除数据

当一个视图由两个或两个以上基表构成时,不允许通过视图删除基表中的数据,即只能通过单基表视图删除数据。

语法:

DELETE FROM view_name

WHERE column_name=<values>

 

修改视图

ALTER VIEW view_name

AS select_statement

 

/*重命名视图student_teachers为v_student_teachers */

EXEC sp_rename 'student_teachers','v_student_teachers'

 

/*删除视图v_student_teachers*/

DROP VIEW v_student_teachers

——大二的期末考试整理 peace_power@126.com