视图 View
一张或多张表的数据子集的逻辑表现
1. 视图不是表,不是一个物理的实体,只是一个逻辑表现
2. 视图中的数据是来源于表的
3. 视图的本质就是子查询
作用:
1. 对数据安全的保护:保护数据表
2. 简化查询语句
3. 更清晰的表达查询
创建视图
create view v_emp10
as
select empno,ename,job from emp where deptno=10;
创建视图,如果已存在视图则替换,并把列名自定义
create or replace view v_emp10 (id,name,job)
as
select empno,ename,job from emp where deptno=10;
select *from v_emp10;
删除
drop view v_emp10 ;
新建部门视图
CREATE VIEW v_dept
AS
SELECT * FROM dept;
从部门视图中查询数据
SELECT * FROM v_dept;
往视图中插入数据
INSERT INTO v_dept VALUES (50, '教学部', '漕河泾');
从表中查询数据
SELECT * FROM dept;
问题: 能不能修改视图中的数据呢?
错误答案1: 能
错误答案2: 不能
正确答案: 有的视图能, 有的视图不能
创建一个各个部门平均工资视图
CREATE VIEW v_dept_avgsal
AS
SELECT dname, avg(sal)
FROM emp RIGHT JOIN dept
ON emp.deptno = dept.deptno
GROUP BY dname;
从视图中查询数据
SELECT * FROM v_dept_avgsal;
INSERT INTO v_dept_avgsal VALUES ('教研部', 20000);
插入失败,因为avg(sal)数据根本不存在