共计 4066 个字符,预计需要花费 11 分钟才能阅读完成。
这篇文章主要介绍了 Oracle 中数据库对象视图怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让丸趣 TV 小编带着大家一起了解一下。
– 常见的数据库对象:
对象描述表基本的数据存储集合,由行和列组成视图从表中抽取的逻辑上相关的数据集合序列提供有规律的数值索引提高查询的效率同义词给对象起的别名 1、Oracle 的视图介绍和创建 a、什么是视图?
视图是一个虚拟的表,视图建立在已有表的基本上,视图赖以建立的这些表称之为基表。
向视图提供数据内容的语句称之为 SELECT 语句。
b、为什么要使用视图?
主要出于两个原因:
1、安全原因,限制数据访问;2、视图可使复杂的查询易于理解和使用。
c、视图的分类
视图分为简单视图、复杂视图、连接视图、只读视图:
1、简单视图只从单表里获取数据;不包含函数和数据组。
2、复杂视图从多表获取数据;包含函数和数据组。
3、连接视图是指基于多个表建立的视图,使用连接视图能够简化连接查询。
4、只读视图只允许使用 select 语句,不允许其他 DML 语句的操作。
附加说明:DML(data manipulation language):它们是 SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这 4 条命令是用来对数据库里的数据进行操作的语言。
d、如何创建视图?
创建视图的语法格式:CREATE [OR REPLACE] VIEW view [(alias[, alias]…)] AS subquery [WITH CHECK OPTION [ CONSTRAINT constraint]] [WITH READ ONLY];
需要注意的是,Oracle 数据库用户必须具有 CREATRE VIEW 权限才能够创建视图。
简单视图的创建示例:
建立用于查询员工号、姓名、工资的视图。
SQL conn sys/02000059 as sysdba;
SQL grant create view to scott;
授权成功。SQL conn scott/02000059
SQL create VIEW emp_view AS select empno, ename, sal FROM emp;
视图已创建。
视图是一张虚拟的表,和表一样,可以通过 SELECT 语句进行查询。
SQL select * from emp_view;
EMPNO ENAME SAL
7951 EASON 3000
7369 G_EASON 800
7499 ALLEN 1600
......
7900 JAMES 950
7902 FORD 3000
7934 MILLER 1300
已选择 15 行。
在创建视图时可以修改列的名称。
SQL create VIEW emp_view2(员工号, 员工名,工资) AS select empno, ename, sal FROM emp;
视图已创建。 SQL select * from emp_view2;
员工号 员工名 工资
7951 EASON 3000
7369 G_EASON 800
7499 ALLEN 1600
7521 WARD 1250
......
7876 ADAMS 1100
7900 JAMES 950
7902 FORD 3000
7934 MILLER 1300
已选择 15 行。
创建连接视图示例:
建立用于获取部门号为 10 的部门号、部门名称以及员工信息。
SQL 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;
视图已创建。 SQL select * from dept_emp_view;
DEPTNO DNAME EMPNO ENAME JOB
10 ACCOUNTING 7782 CLARK MANAGER
10 ACCOUNTING 7839 KING PRESIDENT
10 ACCOUNTING 7934 MILLER CLERK
只读视图示例:建立查看 10 号部门员工信息的视图。
SQL CREATE VIEW emp_view3 AS select * from emp where deptno = 10 with read only;
视图已创建。SQL update emp_view3 set sal = sal + 50;
update emp_view3 set sal = sal + 50
第 1 行出现错误:
ORA-42399: 无法对只读视图执行 DML 操作
2、Oracle 视图的查询修改与删除 a、视图上的 DML 操作
查询视图 -select,如:select * from emp_view;
添加数据 -insert,如:insert into empnew_view(empno, ename, sal) values(8888, LAYNA , 6666);
修改数据 -update,如:update emp_view set sal = sal + 100 where empno = 8888;
删除数据 -delete,如:delete from emp_view where empno = 8888;
注意:针对视图的更新操作(insert、update、delete)实际上改变的是基表中的数据。
b、在创建视图时定义 check 约束
WITH CHECK OPTION 选项用于在视图上定义 CHECK 约束
示例:CHREATE VIEW emp_view4 AS SELECT * FROM emp_view WHERE deptno = 20 WITH CHECK OPTION chk_view;
SQL create view dept_emp_view2 as select * from dept_emp_view where deptno = 10 with check option constraint ck_view;
视图已创建。SQL select * from dept_emp_view2;
DEPTNO DNAME EMPNO ENAME JOB
10 ACCOUNTING 7782 CLARK MANAGER
10 ACCOUNTING 7839 KING PRESIDENT
10 ACCOUNTING 7934 MILLER CLERK
SQL update dept_emp_view set deptno = 20 where empno = 7782;
update dept_emp_view set deptno = 20 where empno = 7782
第 1 行出现错误:
ORA-01779: 无法修改与非键值保存表对应的列
check 约束的作用是在添加或者修改数据时数据必须满足 with check option 前的 where 子句的条件。如上例:修改和添加数据时 deptno 的值必须为 10。
c、修改视图
使用 CREATE OR REPLACE VIEW 子句修改视图。
示例:CREATE OR REPLACE VIEW emp_view AS SELECT * FROM emp WHERE job = SALESMAN
SQL CREATE OR REPLACE VIEW emp_view AS SELECT * FROM emp WHERE job = SALESMAN
视图已创建。
d、删除视图
当视图不再需要时,用户可以执行 DROP view 语句删除视图。(不会删除基表)
SQL DROP VIEW emp_view;
视图已删除。SQL select * from emp_view;
select * from emp_view
第 1 行出现错误:
ORA-00942: 表或视图不存在
3、Oracle 的复杂视图 a、什么是复杂视图?
复杂视图是指包含函数、表达式或者分组数据的视图,它主要用于执行查询操作。
注意:当定义复杂视图时,必须要为函数或者表达式定义列的别名。
b、创建复杂视图
示例:创建用于获得每个岗位平均工资、工资总和、最高工资和最低工资的视图。
SQL 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;
视图已创建。SQL select * from job_view;
JOB AVGSAL SUMSAL MAXSAL MINSAL
CLERK 1037.5 4150 1300 800
SALESMAN 1400 5600 1600 1250
PRESIDENT 5000 5000 5000 5000
MANAGER 2758.33333 8275 2975 2450
ANALYST 3000 9000 3000 3000
c、复杂视图上执行 DML 操作的原则
DELETE 操作原则,视图中包含以下元素之一不能执行 delete 操作:
group by 子句、分组函数、distinct 关键字、rownum 伪列。
UPDATE 操作原则,视图中包含以下元素之一不能执行 update 操作:
group by 子句、分组函数、dinstinct 关键字、rownum 伪列、使用表达式定义的列。
INSERT 操作原则,视图中包含以下元素之一不能执行 insert 操作:
group by 子句、分组函数、dinstinct 关键字、rownum 伪列、使用表达式定义的列、视图上没有包含基表的 NOT NULL 列。
感谢你能够认真阅读完这篇文章,希望丸趣 TV 小编分享的“Oracle 中数据库对象视图怎么用”这篇文章对大家有帮助,同时也希望大家多多支持丸趣 TV,关注丸趣 TV 行业资讯频道,更多相关知识等着你来学习!