视图
简单视图:基于单表建立的,且不包含任何函数运算、表达式或分组函数,叫做简单视图,此时视图是基表的子集;
复杂视图:同样是基于单表,但包含了单行函数、表达式、分组函数或GROUP BY子句,叫做复杂视图;
连接视图:基于多表建立的。
创建视图:
create view 视图名 AS 子查询;
查看视图:
select * from v_emp_10; ---------- (v_emp_10为视图名)
先根据我们需要查询的视图所对应的sql将数据检索出来,
然后再根据我们对视图查询的需求,检索视图查询出来的数据。
所以使用视图查询是两次查询。不推荐对视图进行DML操作,若要进行DML操作,也只是对简单视图进行操作。
对于创建具有check option约束的视图,在对其所做的修改,必须在视图的可见范围内;
即:
对于insert ,新增的记录仍能在视图中查询到;
对于update,修改后的结果在视图中可见;
对于delete,只能删除现有视图中可见的数据。对于创建具有read only约束的视图,对其不能进行DML(增删改)操作,只能对其进行只读(查询)操作,保证了视图对应的基表数据不会被非法修改。
删除视图;
drop view 视图名;
由于视图只是对基表的查询定义,因此删除视图不会对基表数据产生影响。
eg:
-------------------
-----视图 view-----
-------------------
--创建视图 create view 视图名 as 子查询;
create view v_emp_10
as
select empno ,ename,sal, deptno
from emp
where deptno=10;
--查看视图结构
desc v_emp_10;
--查询视图
select * from v_emp_10;
-- 重写已存在的视图 (给原来视图的列添加别名)
create or REPLACE view v_emp_10
as
select empno id ,ename name,sal salary, deptno
from emp
where deptno=10;
--查询使用了别名的视图
select id ,name, salary from v_emp_10;
--通过数据字典中user_views查看视图相关信息
select * from user_views;
-- 通过 user_updatable_columns查看视图
select * from user_updatable_columns where table_name='V_EMP_10';
--通过user_objects查看视图名称
select * from user_objects where object_type='VIEW';
-- 创建一个视图V_EMP_SALARY 复杂视图不允许进行DML操作
CREATE VIEW v_emp_salary
AS
SELECT d.dname, avg(e.sal) avg_sal, sum(e.sal) sum_sal,
max(e.sal) max_sal, min(e.sal) min_sal
FROM emp e join dept d
ON e.deptno = d.deptno
GROUP BY d.dname;
select * from v_emp_salary;
--删除视图, 由于视图只是基表的一个查询定义,所以删除视图并不会基表有影响。
drop view v_emp_salary;