①视图是一种虚拟表,本身不具有数据;视图建立在已有表的基础上

②当对视图中的数据进行增加、删除和修改时,数据表中的数据也会发生相应的变化,反之亦然。

③视图的创建和删除只影响视图本身,不影响对应的基表

一. 创建视图

CREATE VIEW <视图名> [ ( <列名>  [, <列名> ...... ) ] ]

AS <查询>

[WITH CHECK OPTION]

WITH CHECK OPTION语句表示对视图进行UPDATE、INSERT、DELETE操作时要保证更新、插入、删除的行满足<查询>中的条件表达式。

CREATE VIEW View_Student
AS 
SELECT Sno,Sname,Sage
FROM Student;

SELECT * FROM View_Student;
CREATE VIEW View_Student
AS 
SELECT Sno,Sname,Sage
FROM Student
WHERE Sdept = '计算机科学与技术';

SELECT * FROM View_Student;
CREATE VIEW View_Student(number,name,age)
AS 
SELECT Sno,Sname,Sage
FROM Student
WHERE Sdept = '计算机科学与技术';

SELECT * FROM View_Student;
#建立一个可以反应学生出生年份的视图
CREATE VIEW Year(Sno,Sname,Birthday)
AS
SELECT Sno,Sname,2021-Sage
FROM Student;
#将学生的学号和平均成绩建立为一个视图 
CREATE VIEW S_G(Sno,Grade_Avg)
AS 
SELECT Sno,AVG(Grade)
FROM SC
GROUP BY Sno;
#建立选修了一号课程的学生视图(学号、姓名、成绩)
CREATE VIEW Student_1(Sno,Sname,Grade)
AS 
SELECT Student.Sno,Sname,Grade
FROM Student,SC                       #视图建立在基本表之上
WHERE Student.Sno = SC.Sno AND Cno = 1;

#建立选修了一号课程且成绩在90分以上的学生视图 
CREATE VIEW S_1(Sno,Sname,Grade)
AS 
SELECT Sno,Sname,Grade
FROM Student_1                    #视图也可以建立在其他视图之上
WHERE Grade >= 90;

二. 删除视图

DROP VIEW <视图名> [CASCADE]

如果使用CASCADE,则该视图和他导出的视图都会被一起删除

视图的删除不影响基本表;但如果删除基本表,则由该表导出的视图都无法使用

三. 查询视图

#在学生视图中查找年龄大于20岁的学生 
SELECT Sno,Sname,Sage
FROM View_Student
WHERE Sage > 20;
#查询选修了1号课程的学生 
SELECT View_Student.Sno,Sname
FROM View_Student,SC
WHERE View_Student.Sno = SC.Sno AND Cno = 1;

四. 更新视图

通过视图来插入(INSERT)、删除(DELETE)、修改(UPDATE)数据,由于视图是不存储实际数据的虚表,因此对视图的更新将会对基本表中的数据进行更新。

SELECT * FROM Student;

#将学号为121301的学生年龄改为22
UPDATE View_Student         #可以通过视图进行更新
SET Sage = 22
WHERE Sno = 121301;

SELECT * FROM Student;
#向学生表中插入一个新的学生记录,学号为121307,姓名为茜茜,年龄为20
INSERT INTO View_Student(Sno,Sname,Sage)  
VALUES(121307,'茜茜',20);

SELECT * FROM Student;
#删除学号为121305的学生记录
DELETE 
FROM View_Student
WHERE Sno = 121305;

SELECT * FROM Student;

注意:有些视图是无法修改的,例如学生平均成绩的视图,该视图中的学生成绩是通过聚集函数算的,基本表中不存在平均成绩这个属性,因此无法修改。