第八章:Oracle数据库对象--视图

常见的数据库对象
对象 描述
基本的数据存储集合,由行和列组成。
视图 从表中抽出的逻辑上相关的数据集合。
序列 提供有规律的数值。
索引 提高查询的效率。
同义词 给对象起的别名

一、Oracle的视图介绍与创建

什么是视图?

  • 视图是一个虚拟的表
  • 视图建立在已有表的基础上,视图赖以建立的这些表称为基表
  • 向视图提供数据内容的语句为select语句。

为什么要使用视图?主要出于以下两个原因:

  • 安全原因限制数据访问。
  • 视图可使复杂的查询易于理解和使用。

视图的分类:简单视图、复杂视图、连接视图、只读视图。

--创建简单试图(必须具有create view权限的用户才可以创建视图)
--创建用于查询员工号、姓名、工资的视图
create view emp_view
as
select empno,ename,sal from emp;

--查询视图
select * from emp_view;

--为视图的列取别名
create view emp_view2(员工号,姓名,工资)
as
select empno,ename,sal from emp;

select * from emp_view2;


--连接视图
--创建用于获得部门号为10的部门号、部门名称及员工信息
create view dept_emp_view(部门编号,部门名称,雇员编号,雇员名称,雇员职位)
as
select d.deptno,d.dname,e.empno,e.ename,e.job
from dept d,emp e
where d.deptno=e.deptno and d.deptno=10;

select * from dept_emp_view;


--只读视图
--建立查看10号部门员工信息的视图
create view emp_view3
as
select * from emp where deptno=10
with read only;

select * from emp_view3;

二、 Oracle视图的查询修改与删除

--视图上的DML操作
create view empnew_view
as
select empno,ename,sal from empnew;

select * from empnew_view;

--注意:针对视图的更新操作(insert、update、delete)实际改变的是基表中的数据。
--1、insert
insert into empnew_view(empno,ename,sal)values(8888,'LAYNA',6666);
select * from empnew;

--2、update
update empnew_view set sal= sal+100 where empno=8888;

--3、delete
delete from empnew_view where empno=8888;
commit;


--在创建视图时定义check约束
create view empnew_view2
as
select * from empnew where deptno=20
with check option constraint ck_view;
select * from empnew_view2;

--insert\update
update empnew_view2 set deptno=30 where empno=7566;
--语句执行失败,必须满足deptno=20


--修改视图:使用 create or replace view 子句修改视图
select * from empnew_view;

create or replace view empnew_view
as 
select * from emp where job ='SALEMAN';

--删除视图(只会删除视图的定义,并不会删除视图所依赖的基表中的数据)
drop view empnew_view;

三、Oracle的复杂视图

什么时复杂视图?

复杂视图是指包含函数、表达式、或者分组数据的视图,它主要用于执行查询操作。注意:当定义复杂视图时,必须要为函数或表达式定义列别名。

复杂视图执行DML操作的原则

delete操作原则:视图中包含以下元素之一不能执行delete操作:

  • group by子句
  • 分组函数
  • distinct关键字
  • rownum伪列

update操作原则:视图中包含以下元素之一不能执行update操作:

  • group by子句
  • 分组函数
  • distinct关键字
  • rownum伪列
  • 使用表达式定义的列

insert操作原则:视图中包含以下元素之一不能执行insert操作:

  • group by子句
  • 分组函数
  • distinct关键字
  • rownum伪列
  • 使用表达式定义的列
  • 视图上没有包含基表的not null列
--创建用于获得每个岗位平均工资、工资总和、最高工资和最低工资的视图
create view job_view(job,avgsal,sumsal,maxsal,minsal)
as
select job,avg(sal),sum(sal),max(sal),min(sal) from emp group by job;

select * from job_view;

create view job_view(job,avgsal,sumsal,maxsal,minsal)
as
select job,avg(sal),sum(sal),max(sal),min(sal) from emp group by job;
发布了26 篇原创文章 · 获赞 27 · 访问量 5463

猜你喜欢

转载自blog.csdn.net/weixin_44337241/article/details/104698607