- 视图
- 数据库对象之一,在SQl语句中体现的角色与表相同的
- 但视图并不是一张真实存在的表,它
只是对应了一条--SELECT语句查询的结果集。使用视图可以重用子查询
- 并且简化Sql语句的复杂度
- 创建包含3部门员工信息的视图
CREATE VIEW v_EMP_3
AS
SELECT DEPTNO,NAME,SALARY,JOB
FROM EMP
WHERE DEPTNO =3
--------- --------------------------
- 查看视图信息
SELECT * FROM V_EMP_3
- 视图的使用可以参考表的使用
DESC v_EMP_3;
- 视图对应的子查询字段可以使用别名
- 那么该视图对用的字段名就是这个别名
- 若字段含有函数或表达式,必须指定别名
--REPLACE创建修改
CREATE OR REPLACE VIEW v_EMP_3
AS SELECT DEPTNO DNO,NAME ENAME,SALARY SAL,JOB
FROM EMP
WHERE DEPTNO=3;
SELECT *FROM v_EMP_3;
-对视图进行DML操作
-对视图进行DML操作就是对视图数据来源的基础表
-进行DML操作
-只能对简单视图进行DML操作,复杂视图不允许使用DML操作
-对简单视图进行DML操作,也不能违反基本表的约束条件
INSERT INTO v_EMP_3
(DNO,ENAME,SAL,JOB)
VALUES
(3,'tangtang',6666,'editor')
SELECT *FROM v_EMP_3;
SELECT *FROM EMP;
- 当通过视图插入一条数据时,很可能会产生对基本表的污染
- 修改也会造成污染,但是删除不会造成
DELETE FROM V_EMP_3 WHERE ENAME ='tangtang'
- 复杂视图
- 查询含有函数,表达式,分组,去重,多表关联查询
- 复杂视图不能进行DML
- 创建一个各个部门工资,情况的视图
- 视图包含的字段:部门编号,名字,该部门的最小工资
-最高工资,平均工资,工资的总和
SELECT MIN(SAL)FROM v_EMP_3
-------------------------
- 最高工资
SELECT MAX(SAL) FROM V_EMP_3
---平均工资
SELECT avg(SAL)FROM V_EMP_3
- 创建一个各个部门工资,情况的视图
CREATE VIEW v_DEPT_SAL
AS
SELECT E.DEPTNO,D.DNAME,MIN(E.SALARY) MIN_SAL,
MAX (E.SALARY) MAX_SAL,AVG(E.SALARY) AVG_SAL,
SUM(E.SALARY) SUM_SAL
FROM EMP E,DEPT D
WHERE E.DEPTNO=D.ID
GROUP BY E.DEPTNO,D.DNAME
---------------------- -
SELECT * FROM V_DEPT_SAL
-----------------------------
UPDATE V_DEPT_SAL SET DNAME= '宣创部'
WHERE DEPTNO=3
-查看谁比自己所在的部门平均工资高
SELECT E.NAME,E.SALARY,E.DEPTNO,V.AVG_SAL
FROM EMP E,V_DEPT_SAL V
WHERE E.DEPTNO=V.DEPTNO
AND E.SALARY >V.AVG_SAL
-删除视图
DROP VIEW v_DEPT_SAL
- 简单视图删除视图的数据,会对应将其基本表的数据删除,
- 删除视图本身并不会对其基本表数据产生任何影响