×

oracle视图 视图 or

oracle视图(oracle如何创建视图)

admin admin 发表于2023-10-12 07:19:41 浏览40 评论0

抢沙发发表评论

本文目录

oracle如何创建视图

1create view V_StudInfoasselect 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.课程号 2create view V_Studasselect 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)

 

表名和字段名,自己跟你实际的核对一下,不同的改一下

在Oracle 中视图和实例化视图的区别是什么

视图是本质上是一张虚拟表,不包含任何数据。查看查询的结果不任何地方都存储在磁盘上,每次执行查询时,将重新创建该视图。实例化的视图是实际结构存储在数据库中,并写入到磁盘。他们将基于参数定义它们在创建时进行更新。

oracle怎么建视图

基于表或其他视图来创建视图,目的将一些复杂的查询简化,提高查询速度 。如: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. 物化视图是一种特殊的物理表,物化视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,任何对视图的查询,都实际上转换为视图语句的查询。这样对整体查询性能的提高,并没有实质上的好处。

  2. 普通视图和物化视图根本就不是一个东西,说区别都是硬拼到一起的,首先明白基本概念,普通视图是不存储任何数据的,他只有定义,在查询中是转换为对应的定义SQL去查询,而物化视图是将数据转换为一个表,实际存储着数据,这样查询数据,就不用关联一大堆表,如果表很大的话,会在临时表空间内做大量的操作。

  3. 物化视图的类型:二者的区别在于刷新方法的不同,仅在该物化视图需要被刷新了,才进行刷新,即更新物化视图,以保证和基表数据的一致性;而是说,一旦基表有了,即事务提交,则立刻刷新,立刻更新物化视图,使得数据和基表一致。

  4. 物化视图的创建本身是很复杂和需要优化参数设置的,特别是针对大型生产数据库系统而言。但允许以这种最简单的,类似于普通视图的方式来做,所以不可避免的会涉及到默认值问题。也就是说给物化视图的重要定义参数的默认值处理是我们需要特别注意的。

  5. 物化视图在某种意义上说就是一个物理表,这通过其可以被查询出来,而得到佐证;物化视图也是一种段,所以其有自己的物理存储属性; 物化视图会占用数据库磁盘空间。

  6. 在一般视图中,可看到文档的大部分(包括部分图形)内容,但看不见页眉、页脚、页码等,也不能这些内容,不能显示图文内容、分栏效果等。

在oracle中创建一个视图

CREATE 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 temp1as 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 temp1as 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;

Oracle中如何建视图

Oracle中创建视图 Oracle的数据库对象分为五种:表,视图,序列,索引和同义词。 视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改。视图基于的表称为基表。 视图是存储在数据字典里的一条select语句。 通过创建视图可以提取数据的逻辑上的集合或组合。视图的优点: 1.对数据库的访问,因为视图可以有选择性的选取数据库里的一部分。 2.用户通过简单的查询可以从复杂查询中得到结果。 3.维护数据的独立性,试图可从多个表检索数据。 4.对于相同的数据可产生不同的视图。视图分为简单视图和复杂视图: 简单视图只从单表里获取数据 复杂视图从多表 简单视图不包含函数和数据组 复杂视图包含 简单视图可以实现DML操作 复杂视图不可以.视图的创建: CREATE 其中: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; 视图的定义原则: 1.视图的查询可以使用复杂的SELECT语法,包括连接/分组查询和子查询; 2.在没有WITH CHECK OPTION和 READ ONLY 的情况下,查询中不能使用 ORDER BY 子句; 3.如果没有为CHECK OPTION约束命名,系统会自动为之命名,形式为SYS_Cn; 4.OR REPLACE选项可以不删除原视图便可更改其定义并重建,或重新授予对象 权限。 视图的查询: 视图创建成功后,可以从视图中检索数据,这点和从表中检索数据一样。 还可以查询视图的全部信息和指定的数据行和列。 如: 检索数据: SQL》SELECT * FROM dept_sum_vw; 查询视图定义: SELECT view_name,text from user_views; 其中text显示的内容为视图定义的SELECT语句,可通过DESC USER_VIEWS 得到相关信息。 修改视图: 通过OR REPLACE 重新创建同名视图即可。 视图上的DML 操作: DML操作应遵循的原则: 1.简单视图可以执行DML操作; 2.在视图包含GROUP 函数,GROUP BY子句,DISTINCT关键字时不能 删除数据行; 3.在视图不出现下列情况时可通过视图修改基表数据或插入数据: a.视图中包含GROUP 函数,GROUP BY子句,DISTINCT关键字; b.使用表达式定义的列; c.ROWNUM伪列。 d.基表中未在视图中选择的其他列定义为非空且无默认值。视图可用于保持数据库的完整性,但作用有限。通过视图执行引用完整性约束可在数据库级执行约束。 WITH CHECK OPTION 子句限定: 通过视图执行的INSERTS和UPDATES操作不能创建该视图检索不到的数据行, 因为它会对插入或修改的数据行执行完整性约束和数据有效性检查。例如: CREATE OR REPLACE VIEW vw_emp20 AS SELECT * FROM emp WHERE deptno=20 WITH CHECK OPTION constraint vw_emp20_ck; 视图 已建立。 查询结果: SELECT empno,ename,job FROM vw_emp20; EMPNO ENAME JOB--------------------- -------------- ------------- 7369 SMITH CLERK 7566 JONES MANAGER 7902 FORD ANALYST 修改: UPDATE vw_emp20 SET deptno=20 WHERE empno=7902; 将产生错误: UPDATE vw_emp20 * ERROR 位于第一行: ORA-01402:视图WITH CHECK OPTION 违反WHERE 子句 视图的删除: DROP VIEW VIEW_NAME语句删除视图。 删除视图的定义不影响基表中的数据。 只有视图所有者和具备DROP VIEW权限的用户可以删除视图。 视图被删除后,基于被删除视图的其他视图或应用将无效。

怎么在oracle中查询出所有的视图view

1、通过pl/sql,登录oracle数据库,

2、敲入sql,可以查询本库的所有视图view,select * from all_views t,结果中owner代表不同的用户;

3、如果查看本用户的所有视图view,执行sql,select * from user_views t,可以看到本用户并没有创建过视图,

4、如果要看本库,每个用户分别有多少视图view,执行sql,select owner, count(*) from all_views t group by owner,

oracle 视图有什么用呢

比如说图书馆有图书book(id,name,prise....)读者reader(id.....)借阅关系borrow(bookid,readerid,date)显然存在一张表很不方便操作,分开又不方便查看那就建立个视图,view1:select*frombook,reader,borrowwherebook.id=bookidandreader.id=readerid这样只要查询select*fromview1就可以看到谁借了什么书了,包括所有的详细内容。有时后会有非常复杂的逻辑,视图可以用来方便理解,可以当作中间层简化逻辑

oracle数据库,树形结构维护,添加字段值

为什么这样设计?我认为是设计上不太好。问题的本质是劳动街的爸爸是南岗区,南岗区的爸爸是哈尔滨,哈尔滨的爸爸是黑龙江,这个问题的实质是找到最上层的节点。建议你首先学习一下Oralce独有的ConnectBy查询。特别是level什么的虚拟字段要搞懂。table结构修改成:地区代码 父地区代码 地区名称 足够了然后通过connect by 地区代码=父代码 找到root的这个记录的地区名字,问题解决现在这个结构,假设不找黑龙江,要找到哈尔滨,得了,要吐血了。===追加一下,假设表已经有了,可以通过视图修改成父,子结构。用字符函数截取,得到父地区的邮编,同样也能解决问题。这样做性能不好,会大量的全表扫描。性能的根本果然在于设计。

如何在一个视图里增加一个字段

所谓的视图并不是真正存在的表,而是一条sql语句而已,想要增加字段只要重新建立一下视图就可以了create or replace view view_name(col,col1,col3......) as......