视图的定义与删除SQL语言

视图的定义与删除SQL语言 2008-11-05 19:23:42 阅读90 评论0   字号:大中小 订阅 .

         

           视图是从一个或者几个基本表(或视图)导出的表。它与基本表不同,是一个虚表。数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍然存放在原来的基本表中。所以基本表中的数据发生变化,从视图中查询出来的数据也就随之变化。从这个意义上讲,视图就像是一个窗口,透过它能看到数据库中自己感兴趣的数据及其变化。

            视图一经定义,就可以和基本表一样被查询、被删除。也可以在一个视图上再定义新的视图,但是对视图的变更(增、删、改)操作有一定的限制。

一、建立视图(create view)

     使用SQL语言,格式如下:

                        create  view    视图名   【(列名,列名,。。。。)】

                         as   子查询

                        【 with    check    option】  ;

        备注:1、子查询(即select。。。from。。。where。。。)可以是任意复杂的select语句,但是通常不允许

                        含有order by 子句和distinct短语。

                   2、“with check option”表示对视图进行update、insert、delete操作时要保证更新、插入或者删除的

                         行满足视图定义中的谓词条件(即子查询中的条件表达式)。若没有此项要求时,可以不能写、

                        “with check option”语句。

                    3、组成视图的属性列名或者全部省略或者全部指定,不能对其进行部分指定。

                    4、有时可以不写出各列名,但是在下面三种情况下必须明确指定组成视图的所有列名:

                           (1)某个目标列不是单纯的的属性名,而是聚集函数或者列表达式;

                           (2)多表连接时选出了几个同名列作为视图的字段;

                           (3)需要在视图中为某个列启用新的更合适的名字。

                      5、格式中带有“【】”的内容,不是格式的必要组成部分,只要在需要的时候写出即可。

              【例一】建立信息系学生的视图,并要求在修改和插入操作时仍需保证该视图只有信息系的学生。

                 create  view  is-student

                 as

                 select  sno,sname,sage

                 from student

                where sdept='IS'

                whth check option;                      实现在对视图进行修改、插入、删除操作时仍然满足子查询中

                                                                           的条件表达式



概念定义: 行列子集视图:若一个是从单个表导出的,并且只是去掉了基本表的某些行和某些列,但是保留了主码,称这类视图为~

虚拟列:视图中的某些列并不是从基本表中直接查询到数据,而是基本表的数据计算出来的,这些数据并不真实存在在表中。

带表达式的视图:带有虚拟列的视图又称为~

【例二】建立信息系选修了1号课程的学生的视图。

create  view IS-SI (sno ,sname, grade)

as

select student.sno,sname,grade

From student , sc

where sdept='IS'   and  student.sno=cs.sno    and sc.cno=’1’;

备注:由于在这两个表中都涉及到学号sno,所以在select时要明确指出来取的是哪一个sno,所以在sno前面要加上表名student.sno ,以免混淆。

在where条件子句中,要把这个条件加上student.Sno=cs.Sno ,将两个表连接起来。

满足必须要写出视图各列名的第二种情况:多表连接时选出了几个同名列作为视图的字段。

【例三】反应学生出生年份的视图

create   view  BT-S (sno , sname  , sbirth)

as

select  sno, sname , 2008-sage        

from student  ;

备注:视图中的列可以是从基本表中得到的数据经过计算得来的,select语句中可以是一个表达式。

  同时这个情况也满足了视图定义的基本格式中一定要给出视图列名的第一种情况:目标列(即指的是select语句中的列)不是单纯的属性名,而是列表达式。

【例四】将学生的学号以及他的平均成绩定义为一个视图。

create view  S-G (sno , gavg)           满足格式中必须写出视图列名的第一种情况:目标列是一个聚集函数

as

select  sno, AVG(grade)                     目标列是一个聚集函数

from sc

group by sno ;                                  得到的结果按照学号分组,即学号相同的在一起,实现将一个学生的不

                                                             同课程成绩放在一起,然后再写下一个学生的成绩

【例五】将student表中所有女生记录定义为一个视图。

create   view   F-student (F-sno,name,sex,age,dept)

as

select  *                                                                 *表示要建立的视图F-student的属性列与studet表的属性列

                                                                                一一对应,所以可以不必一一列出,*代表全部。

from   student

where ssex='女' ;

 

二、删除视图(drop view)

格式如下:drop  view   视图名  【cascade】

备注:cascade(级联),表示要将该视图和由它导出的所有视图一起删除。如果不加cascade时,则表示如果该视图涉及到了其他视图,则拒绝执行删除。

加了“【】”表示:不是格式的必要组成部分,需要的时候写。

三、对视图进行更新和查询和对基本表的操作相同

转载于:https://my.oschina.net/dminter/blog/205030

猜你喜欢

转载自blog.csdn.net/weixin_34179968/article/details/91888810