登陆注册
14082400000008

第8章 Oracle数据库基础——SQL语言(3)

2.建立视图示例

(1)建立简单视图(单表视图)

从单个表派生出的视图表示定义视图的SELECT语句只从一个表中取数据。

例5-23 建立信息系(IS)学生的视图,并要求进行更新和插入时仍保证该视图只有信息系的学生。

SQL>CR EATE VIEW infostudent

AS SELECT dept,sno,sname,age

FROM student

WHERE dept′IS′

WITH CHECK OPTION

由于定义视图时加上了WITH CHECK OPTION子句,以后对视图的插入、更新操作必须满足dept′IS′的条件。

视图一经定义,就可以和基本表一样进行各种查询,也可以进行一些修改操作。

(2)建立复杂视图(多表视图)

复杂视图包含组函数显示两张或多张表中的数据。建立视图时的子查询语句必须有多张表的联结语句。

例5-24 建立信息系选修了数据库课程的学生视图,包含学号、姓名和成绩。

SQL>C REATE VIEW info-db-student(sno,sname,grade)

AS SELECT s.sno,sname,grade

FROM student s,course c,sc

WHERE dept′IS′

and cname′DB′

and s.snosc.sno

and c.cnosc.cno

上述语句建立了一个从多个表派生出的视图,并分别给视图的各个列命名。

从多个表派生出的复杂视图只能进行查询,不能进行插入、更新和删除操作。

(3)建立含组函数的复杂视图(带虚列的视图或带表达式的视图)

带虚列的视图也称为带表达式的视图,即定义视图时引用了一些基本表中不存在的列,这些不存在的列是由其他实际存在的列按某种表达式计算得到的。

例5-25 将学生的学号及平均成绩定义为一个视图。

CREATE VIEW avggrade(sno,avggrade)

AS SELECT sno,avg(grade)

FROM sc

GROUP BY sno

建立视图的SELECT语句中用到集合函数avg,并按学号sno进行分组。

例5-26 建立一个包含部门名称、部门最小工资、部门最大工资、部门平均工资的视图。

SQL>CREA TE VIEW deptsumvu

(name,minsal,maxsal,avgsal)

AS SELECT dname,min(sal),max(sal),avg(sal)

FROM emp e,dept d

WHERE e.deptnod.deptno

GROUP BY dname

带虚列的视图只能进行查询,不能进行插入、更新和删除操作。

(4)建立带WITH CHECK OPTION选项的视图

建立视图时,如果使用WITH CHECK OPTION选项,可以保证当对视图插入或更新数据时,该数据必须满足视图定义中的SELECT命令所指定的条件。否则,不允许对视图进行插入或更新。

例5-27 对例5-23所建立的视图,对视图进行更新时出错。

执行下述UPDATE操作时,会发生错误。因为违反了建立视图时定义的条件,所以不能对视图进行更新。

SQL>UPDATE infostudent

SET dept′cs′

WHERE sno′95001′

(5)建立带WITH READ ONLY选项的视图

建立视图时,如果使用WITH READ ONLY选项,可以保证对该视图不能进行任何DML操作,只能对视图进行查询。

例5-28 建立带WITH READ ONLY选项的视图,验证不能进行删除。

SQL>CREA TE OR REPLACE VIEW emp20

(idnumber,employee,job)

AS SELECT deptno,ename,job

FROM emp

WHERE deptno20

WITH READ ONLY

执行下列DELETE命令时出错,因为该视图只能查询,不能执行DML操作。

SQL>DELETE FROM emp20

WHERE idnumber10

5.2.2.2 视图的删除

删除视图不影响基本表的数据。删除视图后,视图的定义将从数据字典中删除。由该视图派生出的其他视图或存储过程仍然存在,但无效。只有视图的建立者或拥有DROP ANY VIEW权限的用户才能删除视图。

删除视图的语法如下:

DROP VIEW<视图名>;

例5-29 删除求学生平均成绩的视图。

DROP VIEW avggrade;

5.2.3 索引的建立和删除

索引的目的是使用索引路径快速地查找数据,从而减少磁盘I/O操作、改善性能。索引也可以保证数据的唯一性。索引是由Oracle自动使用和维护的一种数据库对象。

索引与建索引的表在逻辑上和物理上是独立的,所以建立和删除索引,对基表没有影响。

建立索引的方法有两种:自动和手动。

自动方法就是当用户定义的表中某一列有PRIMARY KEY或UNIQUE约束条件时,系统自动建立一个唯一性(UNIQUE)索引,索引的名字就是约束条件的名字。

手动方法就是用户建立的非唯一性索引。

5.2.3.1 建立索引的原则

建立索引时,需要遵循下列原则:

只对较大的表才建立索引(至少有50条记录以上),并且经常要检索的数据少于总行数的2%到4%。

为了加快查询速度,应该在建立索引之前插入数据。如果为了保证数据的唯一性,应该在建立索引之后插入数据。

一个表可建立任意多个索引,但不能太多(一般不超过2~3个)。因为索引会增加系统维护的开销。

一般在作为主键的列上建立索引,或者在经常出现在WHERE子句或联结条件中的列上建立索引。该列称为索引关键字。

索引关键字可以是一个列,也可以是多个列的组合。

对于一般的B树索引,索引关键字必须是其值范围较广的列(如:姓名作为关键字,其取值范围很广)。对于位图索引,索引关键字必须是其值范围较小的列(如:性别作为关键字时,其取值只有男和女两种不同的值)。

建立索引之后,不影响SQL命令的执行,只体现在查询速度上。

建立索引之后,Oracle自动维护和使用索引,用户不必对索引做任何工作。

表比较小、或者表经常被更新、或者要检索的数据超过表行数的2%到4%、或者索引列不是经常作为查询条件的时候不要建立索引。这样反而会增加系统维护索引的开销,对查询效率也不是很明显。如果要检索的数据超过表的行数10%,索引未必能改善检索性能。

索引是一个与表结构独立的结构。当建立索引时,系统自动建立一个索引段,在索引段中包含了索引关键字的值,以及指向该值所在行地址的指针(或称为ROWID)。查询时先查索引段,根据指针查找表中的行,从而避免全表扫描,加快查询速度。

有时候,索引会改善数据检索的性能,但对于数据修改(DML)来说,索引会降低性能。因为除了表修改以外,索引也必须被修改。所以如果表的数据被大量更新,应该删除索引,在更新完成后,重建索引,这样可以改善性能。

5.2.3.2 建立索引

1.建立索引的语法

CR EATE[{UNIQUE|BITMAP}]INDEX<索引名>

ON<表名>(<列名>[,<列名>]……);

其中:

索引可以建在该表的一列或多列上,各列名之间用逗号分隔。

UNIQUE表示建立唯一性索引,保证指定列上的值唯一,保证数据的完整性。

BITMAP表示建立位图索引,加快查询速度。索引关键字取值范围很小。

默认表示建立非唯一索引,加快查询速度。索引关键字取值范围很广。

如果索引关键字只有一列,则是简单索引。如果索引关键字有多列,则是复合索引,第一个关键字是主关键字,后面的关键字是次关键字。如果是复合索引,则查询条件中含有主关键字时,系统使用索引,加快查询速度。如果查询条件中只含有次关键字,则系统不使用索引。

索引一经定义,其定义信息被存储到系统的数据字典中。一般索引名为表名列名。

2.建立索引示例

(1)建立非唯一简单索引

例5-30 在emp表的ename列上建立一个非唯一的简单索引。

SQL>CREATE INDEX empename ON emp(ename)

(2)建立唯一简单索引

例5-31 建立唯一索引保证每条记录中的empno值是唯一的。

SQL>CREATE UNIQUE INDEX empempno ON emp(empno)

建立唯一索引后,插入或修改记录时,如果empno值重复时,会出现错误信息。

(3)建立复合索引

例5-32 在insuredautos表中make、model、year这三列建立复合索引,保证这三列的值组合起来唯一。

SQL>CREATE INDEX autoidx ON insuredautos(make,model,year)

由于make是主关键字,model是次关键字,所以执行查询时条件中含有make时,系统会使用索引,加快速度。但如果查询条件中不含make,而含model时,系统就不使用索引。

例5-33 执行下列查询语句,系统会使用索引,加快查询速度。

SQL>SELECT count(*)FROM insuredautos

WHERE make′ford′and model′taurus′

例5-34 执行下列查询语句,系统不使用索引。

SQL>SELECT count(*)FROM insuredautos

WHERE model′taurus′

同类推荐
  • 三维动画审美谈

    三维动画审美谈

    数字时代,美的标准充满更多的不确定性。而三维动画以数字图像形式成为这个图时代的代表。三维动画及三维图像不仅仅是由于应用了仿真数字图像技术而带来的虚拟空间,还有更多的是由三维图像技术所引发或引导的被扩展的图像技术,这些技术无不应用在现代视觉设计领域的各个方面,并且,由此引起社会的追热,引起审美观念的改变。这些改变是在进行中的,变化中的,也是在发展中的。对于未知的美,我们做的只是追寻和记录,我们不知道以后的美将会是什么样,尽管我们苦苦追寻,孜孜探讨,同时也在默默审视。我们在追寻中享受美,在探讨中认知美,在审视中体验美……
  • 产品经理入门攻略(预售版)

    产品经理入门攻略(预售版)

    《产品经理入门攻略》深入浅出地告诉大家什么是产品经理,分别通过入门篇、基础篇和进阶篇梳理了不同的学习重点与方法,同时结合了多位作者的亲身经历,解答了常见的工作问题。《产品经理入门攻略》集合了数十位优秀的作者,作为移动互联网时代一本难得的图书,适合产品经理和运营阅读,大家阅读时可以找到不少实用的工作方法。我们希望本书能成为移动互联网时代中学习产品的经典之作。
  • 现代企业财务软件应用教程

    现代企业财务软件应用教程

    本书内容包括财务软件概论、系统管理、企业应用平台、总账管理、报表管理、薪资管理、固定资产管理、应收款管理、应付款管理等。
热门推荐
  • 星月离尘

    星月离尘

    星月,一个暗居幕后离尘,一个寻求自我是欢喜还是,充满暗斗?(本文少打斗,无热血,非一般修真文,谢)
  • 黑巷子

    黑巷子

    这可能算不上是一篇小说,只是心里某些想法的表达。漫长青春岁月里总会遇到那几个人,成为你今后成长的理由。所以其实这也能算是我的回忆录。大家凑合看看吧,我会尽量填满这个坑。然后大家可以分享属于你们的故事。
  • 火影之暴走

    火影之暴走

    看少年叶冥玉在火影世界中演绎精彩的人生,一步步成长
  • 极品修仙狂人

    极品修仙狂人

    都市修仙,张狂无限!宗师?真人?恕我直言,在我眼里,你们统统是……辣鸡!如果你们看我不顺眼,呵呵,那你特么来打我啊!当然,如果有意见的话,可以随便说,反正我也不会改。总之,你们只需要记住,我叫张风。嚣张的张!
  • 有一天我会舍得

    有一天我会舍得

    我爱上一个我想看见和舍不得说再见的人但一开始我就知道有一天我会舍得初恋有没有结果?很多人都在探讨,但现实中真正坚持到最后的寥寥无几。有人说是因为初恋不够成熟不够认真,但是,就算遇到了对的人,就算认真了,好像……也不一定能在一起吧。如果两条平行线强行变轨,注定要相交,那么相交以后呢?朝着不再平行的方向越走越远吗?只能在背后默默地看着那个人的背影,那时的心酸,最远不过是晚霞。所有因时光消失在生命里的人,都是过客。但,我不想与你匆匆擦肩。对不起,我好像还是爱你。
  • 乱古逍遥游

    乱古逍遥游

    神域之中,乱古大帝遭受诸神轰击,身死之时用一块石碑记录下所有神王的攻击法门以及魔法属性;数万年后,一次偶然的盗墓活动让张健来到了这个混乱的世界“乱古大陆”。通过种种机缘偶遇,让他破解了石碑上的秘密,自创真奥神术,挑战诸天神王,破灭诸天万法,成就一代至尊。玲珑心无暇道兵、逍遥客、库仑斯大帝的死难场、善良懦弱的富辽巨人、暗黑渡轮、嗜血狂徒、行尸俱乐部,更多精彩敬请期待!
  • 做人要本分 做事要圆滑

    做人要本分 做事要圆滑

    《做人要本分,做事要圆滑》是一把开启事业与人生成功的钥匙,不仅带给读者解读人心的意外惊喜,而且带给读者说话办事的实用策略和为人处世的深刻道理。方乃做人之本,圆是处事之道。不会做事,做人无从谈起;不会做人,做事南辕北辙。只有在做事中才能体会做人的道理,同样,只有在做人中才能体会做事的意义。真正的成功者无不深谙既会做事、又会做人的奥妙真谛,所以才能达到无往而不胜的高超境界。
  • 人生运势500问:面相100问

    人生运势500问:面相100问

    中国有句古话叫“相由心生”,即一个人的个性、心思与作为,会通过面部特征表现出来。美国当代心理学家利奥波德·贝拉克博士说:“面孔是一个人内心情感和生活经历的永久习惯记录,它就像一张地图,不仅能反映人的气质和性情,通过对它的正确解读,还可以改善各种人际关系。不要把解读面孔看做是一种算命,而是把它看做一种识别他人品质的工具。”在古代,无论是相亲、看病,还是询问前途,人们都要看相,所以相士门前常常是“朝野归凑,人物常满”。也许有人对此表示怀疑:通过面貌就可观察一个人的前程,他是健康还是生病?面相的依据是什么?它真的很灵吗?难道这不是迷信?其实,中国面相学是一门严肃的生命信息科学。
  • 逝水流年只是一眼繁华

    逝水流年只是一眼繁华

    他们邂逅在秋风涤荡的午后,秋叶零落,迷藏娇嗔。此后的七年里,两个人频频邂逅,却未能遂愿。从初中到高中,从高中到大学。他为了她走上文字的道路,开始写小说。她为了他,从冰山冷美人,变成温柔俏佳人。经历了2012,经历了生与死,经历了爱与恨。到最后,是否依旧难舍难分,扪心自问,心中那一汪清流到底作何解释,那是爱吗?
  • 绝色毒娘子

    绝色毒娘子

    女主尹诺儿无父无母,被杀手组织收养,智商200+,对制毒有神一般的天赋,除此之外,琴棋诗画样样精通暗杀技能无所不会,被称为暗夜帝国的王,只要她接到的单子从未失手过,对敌人心狠手辣,对对自己好的人倾尽一切!做人宗旨是人不犯我我不犯人;人若犯我,斩草除根!男主北宫浩轩,南陵七王爷,少年时一战成名大败北齐,却在那一战中受伤,双腿不能站立,性格大变,阴沉暴虐。女主穿越到架空国家南陵国第一丑女身上,与七王爷成婚,大婚当天便猖狂地说道,用你一双腿换我一纸休书如何?看天下第一丑女如何翻身成倾城女子,看霸气女主如何搅乱这片大陆!