视图的定义及使用:
1.视图的定义语法:
2.视图的使用限制:
在所有进行的sql语句之中,查询是最复杂的操作,而且查询还和具体的开发要求有关。
程序员使用视图可以从复杂查询中解脱出来,利用视图可以实现复杂sql语句的封装操作。
视图依然属于DDL的定义范畴,所以视图的创建需要使用如下语法:
CREATE[OR REPLACE] VIEW 视图 AS 子查询
CREATE VIEW myview AS SELECT * FROM emp WHERE deptno = 10;
将10部门的所有员工信息保存在视图之中
从Oracle 10G R2版本开始如果想要创建视图,那么就需要单独分配视图
范例:为scott分配创建视图的权限
CONN sys/change on install AS SYSDBA;
GRANT CREATE VIEW TO scott;
CONN scott/tiger;
权限分配完成之后则可以进行视图的创建操作,视图本身属于数据库对象,要想查看视图的信息可以使用“user_views”数据字典完成,在这个数据字典里面可以查询到视图的具体语法
视图可以向普通的数据表那样可以直接查询
SELECT * FROM myview;
视图中只是包含有查询语句的临时数据,并不是真实存在的,可是在默认情况下创建的视图是可以直接进行修改操作的,为了保证视图的创建条件不被更新,则可以在创建视图的时候使用WITHCHECK OPTION 子句
CREATE VIEW myview AS SELECT * FROM emp WHERE deptno = 10 WITH CHECK OPTION;
此时使用了WITH CHECK OPTION子句可以保证视图的创建不被更新,如果使用了更新,就会出现错误信息
修改其他字段:
UPDATE myview SET sal=80000 WHERE empno=7369;
此时更新成功了,发现视图更新时改变的是数据表中的数据,这样的做法也不合理
所以一般创建视图的时候,由于里面都属于映射的数据,应该创建一个只读视图,使用WITHREAD ONLY子句完成
CREATE VIEW myview AS SELECT * FROM emp WHERE deptno = 10 WITHREAD ONLY;
现在就创建了一个只读视图,再次发出修改操作的话就会报错
视图包装了复杂查询
1.视图的定义语法:
2.视图的使用限制:
在所有进行的sql语句之中,查询是最复杂的操作,而且查询还和具体的开发要求有关。
程序员使用视图可以从复杂查询中解脱出来,利用视图可以实现复杂sql语句的封装操作。
视图依然属于DDL的定义范畴,所以视图的创建需要使用如下语法:
CREATE[OR REPLACE] VIEW 视图 AS 子查询
CREATE VIEW myview AS SELECT * FROM emp WHERE deptno = 10;
将10部门的所有员工信息保存在视图之中
从Oracle 10G R2版本开始如果想要创建视图,那么就需要单独分配视图
范例:为scott分配创建视图的权限
CONN sys/change on install AS SYSDBA;
GRANT CREATE VIEW TO scott;
CONN scott/tiger;
权限分配完成之后则可以进行视图的创建操作,视图本身属于数据库对象,要想查看视图的信息可以使用“user_views”数据字典完成,在这个数据字典里面可以查询到视图的具体语法
视图可以向普通的数据表那样可以直接查询
SELECT * FROM myview;
视图中只是包含有查询语句的临时数据,并不是真实存在的,可是在默认情况下创建的视图是可以直接进行修改操作的,为了保证视图的创建条件不被更新,则可以在创建视图的时候使用WITHCHECK OPTION 子句
CREATE VIEW myview AS SELECT * FROM emp WHERE deptno = 10 WITH CHECK OPTION;
此时使用了WITH CHECK OPTION子句可以保证视图的创建不被更新,如果使用了更新,就会出现错误信息
修改其他字段:
UPDATE myview SET sal=80000 WHERE empno=7369;
此时更新成功了,发现视图更新时改变的是数据表中的数据,这样的做法也不合理
所以一般创建视图的时候,由于里面都属于映射的数据,应该创建一个只读视图,使用WITHREAD ONLY子句完成
CREATE VIEW myview AS SELECT * FROM emp WHERE deptno = 10 WITHREAD ONLY;
现在就创建了一个只读视图,再次发出修改操作的话就会报错
视图包装了复杂查询