视图

视图

视图:

视图也被称为虚表,也就是虚拟的表,是一组数据的逻辑表示。

视图相对应于一条SELECT语句,结果集被赋予一个名字,即视图名字。

视图本身并不包含任何数据,它只是映射到基础表的一个查询语句,当基础表数据发生变化时,视图数据也会随之发生变化。

自我理解:视图其实就好比java中的方法一样,写好之后谁需要谁调用就好。

视图的命名:所有数据库对象名字不能有重复,一般约定俗成:V_名字_条件。

 视图分为两种:1.简单视图 2.复杂视图

1.简单视图(没有添加任何函数处理)

创建简单视图

--重要 
CREATE
VIEW V_EMP_1 as SELECT ENAME,EMPNO,SAL,DEPTNO FROM EMP WHERE DEPTNO=10;

结果如下:

  简单视图可以进行DML操作。

--给别名  当视图中字段有了别名  就用别名来命名
  CREATE OR REPLACE VIEW V_EMP_2
 as
 SELECT ENAME,EMPNO ,SAL,DEPTNO 
 FROM EMP
 WHERE DEPTNO=20
 WITH CHECK OPTION;
 --从视图中插入数据
  INSERT INTO  V_EMP_2
  (ENAME,EMPNO,SAL,DEPTNO)
  VALUES('LIUSHE',50,6626,10);  

注意:上面代码又创建了一个简单视图,第二部分是插入数据。但是插入数据后,在视图中是找不到这个记录的,在基础表中可以找到该记录???

答:

注意:该图片中10和20 是相反的 ,但是意思是一样的。

WITH CHECK OPTION 检查如果数据可以在视图内显示 ,不会报错 不可以就报错。

注意注意注意(重要的是说三遍):插入数据时一定要注意数据类型,和过滤条件,如果不注意,会出现数据污染(基础表内数据发生变化,但视图内数据不发生变化),数据的添加和修改都可能会造成数据污染,但是删除不会造成数据污染。一定要用WITH CHECK OPTION检查是否可以。

WITH CHECK OPTION检查如果不成功会直接报错。

例:

 2.复杂视图(同样是基于单表,但包含了单行函数、表达式、分组函数或GROUP BY字句)

创建复杂视图

 --创建复杂视图  创建一个含有部门工资情况的视图
  --内容为 部门编号 部门名称 部门最高 最低 平均 以及工资总和 和信息
   CREATE OR REPLACE VIEW V_DE_S
   AS
   SELECT D.DEPTNO,D.DNAME,MIN(E.SAL) MINSA,MAX(E.SAL) MAXSA,AVG(E.SAL) AVGAS,SUM(E.SAL) SUMSA
   FROM EMP E,DEPT D
   WHERE E.DEPTNO=D.DEPTNO
   GROUP BY D.DEPTNO,D.DNAME

案例:把复杂视图调用 用于实际操作

--查看谁比自己所在部门平均工资高
   SELECT E.ENAME,E.SAL,E.DEPTNO
   FROM EMP E,V_DE_S V
   WHERE E.DEPTNO=V.DEPTNO
   AND E.SAL>V.AVGAS;

最后视图的操作:

删除视图:删除视图本身不会影响基础表的数据,但是删除视图数据会影响基础表。

DROP VIEW 视图名

简单视图可以进行DML操作,复杂视图不可以进行DML操作。

ok视图部分完毕。

原文地址:https://www.cnblogs.com/lchh/p/9337817.html