1、视图(View)创建使用,视图(View)实际上是一张或者多张表上的预定义查询,这些表称为基表。从视图中查询信息与从表中查询信息的方法完全相同。只需要简单的SELECT…FROM即可。
创新互联提供成都网站制作、成都网站设计、网页设计,成都品牌网站建设,1元广告等致力于企业网站建设与公司网站制作,10多年的网站开发和建站经验,助力企业信息化建设,成功案例突破上千家,是您实现网站建设的好选择.
2、OR REPLACE:如果视图已经存在,则替换旧视图。
3、FORCE:即使基表不存在,也可以创建该视图,但是该视图不能正常使用,当基表创建成功后,视图才能正常使用。
4、NOFORCE:如果基表不存在,无法创建视图,该项是默认选项。
5、 WITH READ ONLY:默认可以通过视图对基表执行增删改操作,但是有很多在基表上的限制(比如:基表中某列不能为空,但是该列没有出现在视图中,则不能通过视图执行insert操作),WITH READ ONLY说明视图是只读视图,不能通过该视图进行增删改操作。现实开发中,基本上不通过视图对表中的数据进行增删改操作。
视图具有以下优点:可以限制用户只能通过视图检索数据。这样就可以对最终用户屏蔽建表时底层的基表。可以将复杂的查询保存为视图。可以对最终用户屏蔽一定的复杂性。 限制某个视图只能访问基表中的部分列或者部分行的特定数据。这样可以实现一定的安全性。从多张基表中按一定的业务逻辑抽出用户关心的部分,形成一张虚拟表。
基于表或其他视图来创建视图,目的将一些复杂的查询简化,提高查询速度 。如:
CREATE VIEW v_name AS SELECT b.dname,a.ename FROM emp a,dept b
WHERE a.deptno=b.deptno ;
查询部门名和员工名 通过建立视图,v_name 视图就等同于SELECT b.dname,a.ename FROM emp a,dept b
WHERE a.deptno=b.deptno 这样可以大大的简化程序
Oracle创建跨用户视图,也就是跨模式视图。
1、首先在A中运行,把读取的权限赋值给B,这样在B中建立视图就可
grant select on A.userA to B; 以读取A中userA表中的数据了。
2、登录用户B表空间,建立视图 语句如下:
create or
replace view cas_user_view as select
B.LOGIN_NAME,B.PASSWORD,B.LOGIN_FLAG from userB B union select
A.LOGIN_NAME,A.PASSWORD,A.LOGIN_FLAG
from A.userA
A;
到此,在用户B中已建立名为
cas_user_view的视图,可以供A和B同时使用。
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name
[(alias[, alias]...)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY]
OR REPLACE :若所创建的试图已经存在,ORACLE自动重建该视图;
FORCE :不管基表是否存在ORACLE都会自动创建该视图;
NOFORCE :只有基表都存在ORACLE才会创建该视图:
alias :为视图产生的列定义的别名;
subquery :一条完整的SELECT语句,可以在该语句中定义别名;
WITH CHECK OPTION :插入或修改的数据行必须满足视图定义的约束;
WITH READ ONLY :该视图上不能进行任何DML操作。
CREATE OR REPLACE VIEW dept_sum_vw
(name,minsal,maxsal,avgsal)
AS
SELECT d.dname,min(e.sal),max(e.sal),avg(e.sal)
FROM emp e,dept d
WHERE e.deptno=d.deptno
GROUP BY d.dname;
--给用户授权创建视图
-- grant create all view to zdgshr; 所有数据库都能创建视图的用户
grant create view to zdgshr;
--创建简单视图
create view temp
as
select * from zd_member_basic_info;
--测试
select * from temp where rownum=1;
--创建简单视图:只读
create or replace view temp1
as
select id,job_number,name,dept_id from zd_member_basic_info
with read only;
--测试
insert into temp1(id,job_number,name,dept_id) values(1,0,'张三',1300);
视图的删除:
DROP VIEW VIEW_NAME语句删除视图。
删除视图的定义不影响基表中的数据。
只有视图所有者和具备DROP VIEW权限的用户可以删除视图。
视图被删除后,基于被删除视图的其他视图或应用将无效。
四、视图分为简单视图和复杂视图。
简单视图只从单表里获取数据;复杂视图从多表里获取数据。
简单视图不包含函数和数据组;复杂视图包含函数和数据组。
简单视图可以实现DML操作;复杂视图不可以。
create or replace view temp1
as
select distinct name,job_number,dept_id from zd_member_basic_info
with read only;
delete from zd_member_basic_info where name='而过';
create or replace view temp
as
select * from zd_member_basic_info order by name;
create
or
replace
view
视图名
as
...;
基本的创建命令:
比如:创建表book的一张视图
create
or
replace
view_book
as
select
*
from
book
where
book_id
='001';
使用视图,就用select
*
from
view_book;
当然了,使用
图形化界面
更方便。
1
create view V_StudInfo
as
select a.学号,a.姓名,b.课程号,b.课程名,
case when c.成绩 between 90 and 100 then '优'
when c.成绩 between 80 and 89 then '良'
when c.成绩 between 70 and 79 then '中'
when c.成绩 between 60 and 69 then '及格'
else '不及格' end 成绩等级
from 学生表 a,课程表 b, 成绩表 c where a.学号=c.学号
and b.课程号=c.课程号
2
create view V_Stud
as
select a.学号,a.姓名,count(*) 所修科目数,avg(成绩) 平均成绩
from 学生表 a,课程表 b, 成绩表 c where a.学号=c.学号
and b.课程号=c.课程号
and a.学号 in
(select a.学号
from 学生表 a,课程表 b, 成绩表 c where a.学号=c.学号
and b.课程号=c.课程号 and b.课程名='英语' and c.成绩75)
表名和字段名,自己跟你实际的核对一下,不同的改一下