前言:我们发现在数据库操作的过程中有时候需要的数据分散在几个表中,如果我们一直利用笛卡尔积来进行连接去操作的话就会很复杂产生很大的消耗。这时候我们可以创建一个虚表——视图来进行操作。
视图的定义
在SQL中,外模式一级数据结构的基本单位是视图(view),视图是从若干基本表和其他视图采用SELECT语句构造出来的。
在创建视图时,只是把其视图的定义存放在数据字典中,而不存储视图对应的数据。因此,称视图为虚表。
视图的创建
创建视图可用“CREATE VIEW”语句实现。其句法如下:
CREATE VIEW <视图名>(<列名序列>)
AS <SELECT 查询语句>
例 对于教学数据库中基本表S、SC、C,用户经常要用到S#、SNAME、CNAME和SCORE等列的数据,那么可用下列语句建立视图:
CREATE VIEW STUDENT_SCORE(S#,SNAME,CNAME,SCORE)
AS SELECT S.S#,SNAME,CNAME,SCORE
FROM S,SC,C
WHERE S.S# = SC.S# AND SC.C# = C.C#;
视图的撤销
在视图不需要时,可以用“DROP VIEW”语句把其从系统中撤销。其句法如下:
DROP VIEW 视图名
例 撤销STUDENT_SCORE视图,可用下列语句实现:
DROP VIEW STUDENT_SCORE;
视图的更新(在这里不建议对视图进行更新)
如果视图是从单个基本表只使用选择、投影操作导出的,并且包含了基本表的主键,那么这样的视图称为“行列子集视图”,并且可以被执行更新操作。
例子:
如果定义了一个有关男学生的视图:
CREATE VIEW S_MALE
AS SELECT S#,SNAME,AGE
FROM S
WHERE SEX ='M';
这个视图是从单个关系只使用选择和投影导出的,并且包含主键S#,因此是可更新的。
例如,执行插入操作:
INSERT INTO S_MALE
VALUES('S28','WU',18);
系统自动会把它转变成下列语句:
INSERT INTO S
VALUES('S28', 'WU',18, 'M');
除此之外都不可以进行视图的更新,只有这一种情况可以对视图进行更新!
视图的优点:
视图是用户一级的数据观点,由于有了视图,使数据库系统具有下列优点:
(1)视图提供了逻辑数据独立性。
(2)简化了用户观点。数据库的全部结构是复杂的,并有多种联系。
(3)数据的安全保护功能。