SQL

视图(view)

视图
  • 视图就是封装了一条复杂查询的语句,创建视图的时候查询的 sql 不能有重复的列名。
  • 语法:
    CREATE VIEW 视图名称 AS 子查询
    
  • 范例:建立一个视图,此视图包括了20部门的全部员工信息

创建视图的时候,若提示权限不足,需要以管理员身份登录执行 grant connect,resource,dba to scott; 赋予用户 scott 一些权限!

  • 视图创建完毕就可以使用视图来查询,查询出来的都是 20 部门的员工。
  • 示例图:
    oracle(31)_SQL_视图(view)_sql
    oracle(31)_SQL_视图(view)_SQL_02
  • 语法:
    CREATE OR REPLACE VIEW 视图名称 AS 子查询
    
  • 如果视图已经存在我们可以使用 语法2 来创建视图,这样已有的视图会被覆盖。
  • 示例图:
    oracle(31)_SQL_视图(view)_oracle_03
  • 那么视图可以修改吗?
  • 我们尝试着修改视图但是发现是视图所查询的表的字段值被修改了,所以我们一般不会去修改视图。
  • 示例图:
    oracle(31)_SQL_视图(view)_子查询_04
  • 可以设置视图为只读
  • 语法:
    CREATE OR REPLACE VIEW 视图名称 AS 子查询 WITH READ ONLY
    
  • 示例图:
    oracle(31)_SQL_视图(view)_SQL_05

以上操作完成源码:

--查询20部门的员工
select * from emp t where t.deptno = 20;

--创建部门是20的员工的视图
create view view_d20 as select * from emp t where t.deptno = 20;
--查询视图
select * from view_d20;

--创建视图或者覆盖视图
create or replace view view_d20 as select * from myemp t where t.deptno = 20;
--查询视图
select * from view_d20; 

--修改视图, 修改视图其实是修改视图对于的表的数据,视图不建议修改 
update view_d20 t set t.ENAME = '史密斯' where t.EMPNO = 7369;
--查询原表数据
select * from myemp; 
 
--创建只读的视图  
create or replace view view_d20 as select * from myemp t where t.deptno = 20 with read only;
--查询视图
select * from view_d20; 

如有错误,欢迎指正!