您的位置:首页 > 数据库

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

2011-12-12 08:29 288 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: