视图是一个虚表,我们大脑当中思绪查询表的时候,大脑里面思考过程其实也是视图之间的转换。
这个其实更像是一个方法,就是我们如果调用这个视图的话,就会直接运行我们定义的查询功能,我们建立这个视图的时候并不会进行子查询。
定义视图
语句格式:
1 | CREATE VIEW 视图名 [列名,列名,列名] AS 子查询; |
基于基本表创立视图
建立一个信息系学生的视图:
1 | CREATE VIEW IS_Student AS |
建立信息系学生的视图,并要求进行修改和插入操作仍需保证该视图只有信息系的学生。
1 | CREATE VIEW IS_Student AS |
上例加入了WITH CHECK OPTION。当我们对视图进行更新的时候,会有如下:如果你对这个视图进行查询,更新,删除之类的操作的话,会自动在后面补上Sdept = 'IS。
基于视图创建视图
1 | CREATE VIEW IS_S2 AS |
删除视图
语句的格式:
1 | DROP VIEW 视图名[CASCADE]; |
视图查询/消解
我们的视图其实在查询时就是将FROM后面的视图消解成视图的子查询。
视图更新
通过视图直接怼基本表进行更改,当让是在消解的前提下。但是在有些限制的条件下,视图是无法更新的,不能唯一的有意义转换成对相应基本表的更新
修改
将信息系学生视图IS_Student中学号200215122的学生姓名改为“刘晨”:
1 | UPDATE IS_Student SET Sname ='刘晨' WHERE Sno = '200215122'; |
消解转换后的语句:
1 | UPDATE Student SET Sname = '刘晨' |
插入
向信息系学生视图中插入一个新的学生记录:200215129,赵新,20岁
1 | INSERT INTO IS_Student VALUES ('200215129','赵新',20); |
转换为对基本表的更新:
1 | INSERT INTO Student(Sno,Sname,Sage,Sdept) VALUES ('200215129','赵新',20,'IS'); |
删除
删除信息系学生视图IS_Student中学号为200215129的记录。
1 | DELETE FROM IS_Student WHERE Sno='200215129'; |
转换为基本表更新:
1 | DELETE FROM Student WHERE Sno = '200215129' AND Sdept = 'IS'; |
说些什么吧!