视图是从一个或几个基本表(或视图)导出的表,它与基本表不同,是一个虚表。数据库中只存放视图的定义,而不存放视图对应的数据,数据仍在基本表中。一旦基本表中的数据发生变化,从视图查出的数据也就发生了变化。所以说视图就像一个窗口,透过窗口可以看到数据库中的数据是否发生了变化。
举例说明:
(1)建立信息系学生的视图:
CREATE VIEW IS_Student
AS
SELECT Sno,Sname,Sage
FROM Student
WHERE Sdept='IS'
WITH CHECK OPTION;
解释如下:
1>:WITH CHECK OPTION:只能更新此视图范围内的数据
2>:组成视图的属性列或者全部省略或者全部指定,没有第三选择。如果省略,则该视图的属性列为SELECT子句中的属性列,但是以下三种情况必须全部指定属性列:
1.某个目标列是聚集函数或表达式
2.多表连接时选出同名列作为视图的属性列
3.需要在视图中为某个列建立新的更适合的名字
3>上面的视图是行列子集视图,行列子集视图:一个视图从单个基本表导出,去掉了基本表的某些行和列,保留了主码。
(2)建立在多个基本表上的视图
CREATE VIEW IS_S1(Sno,Sname,Grade)
AS
SELECT Student.Sno,Sname,Grade
FROM Student,SC
WHERE Sdept='IS' AND Student.Sno=SC.Sno AND SC.Cno='1';
(3)建立在视图上的视图
CREATE VIEW IS_S2
AS
SELECT Sno,Sname,Grade
FROM IS_S1
WHERE Grade>=90;
(4)带有虚拟列的视图
CREATE VIEW BT_S(Sno,Sname,Sbirth)
AS
SELECT Sno,Sname,2018-Sage
FROM Student;
(5)分组视图:用带有聚集函数或GROUP BY子句的查询定义的视图
CREATE VIEW S_G(Sno,Gavg)
AS
SELECT Sno,AVG(Grade)
FROM SC
GROUP BY Sno;