登陆注册
31848700000008

第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′

同类推荐
  • 云计算、网络安全和网络盗窃:网络世界防盗初学指南

    云计算、网络安全和网络盗窃:网络世界防盗初学指南

    网络犯罪层出不穷,保护自己的安全,防止受到攻击,似乎是一个艰巨的任务。幸运的是,有一些人人都能采取的措施,可以降低成为网络袭击对象的风险。保证基于云计算程序的安全和降低被袭击的风险,关键在于理解云安全的共同责任。云提供商需要全力确保实施尽可能严格的安全策略。
  • 网络知识

    网络知识

    一般地说,将分散的多台计算机、终端和外部设备用通信线路互联起来,彼此间实现互相通信,并且计算机的硬件、软件和数据资源大家都可以共同使用,实现资源共享的整个系统就是计算机网络。
  • 数据库原理及Oracle应用

    数据库原理及Oracle应用

    进入21世纪,随着国家信息化步伐的加快及各行业信息化进程的不断加速,社会对专业(非计算机专业)人才的信息技术能力要求越来越高。为了适应社会对专业人才的要求,全国各高校在重视专业知识培养的同时也非常注重计算机应用能力的训练,即信息技术能力的培养。计算机应用水平已成为衡量高校毕业生综合素质的突出标志之一。
  • 信息革命

    信息革命

    随着经济社会的快速发展,电子产品走进了千家万户,与电子产品相伴的信息技术也已渗透到人们生产生活的方方面面。加强信息技术普及,已成为业内人士的共识。鉴于此,在有关部门的大力支持下,经过认真筹划,我们编辑出版了《信息革命》一书。该书以时间为经,在记述信息技术发展历程的同时,深入浅出地介绍了信息技术的相关知识,对人们更好地利用现代信息技术服务经济社会建设和个人生产生活必将产生积极作用。本书由李大东主编。
热门推荐
  • 旋木隐秋

    旋木隐秋

    那天,风很大,语墨兮和夜玄翊站在桥头,看着夕阳渐渐落下,地平线上方还残留下些许橙红的光影。在暗蓝的幕布下,它们是那样的单薄。它们在空中微微得颤动,一下,两下,三下……直至彻底的消失在夜幕之中,被黑暗……所吞噬。她问他:“如果有一天,你喜欢的那个人离开了你,你会怎么做啊?”他答:“只要她愿意回来,我就会一直等,等到她回来的那一天。”
  • 虐恋:高冷校草的甜心丫头

    虐恋:高冷校草的甜心丫头

    曾经,她在,他不懂珍惜,现在,她走了,他却该怎么面对.....
  • 大长公主升职记

    大长公主升职记

    一个出生于青楼的卑贱之人,一步一步从洗衣女奴成长为大长公主的故事。她本是路边任人踩踏的小草,一朝成为呼风唤雨的大长公主,她想膨胀。话不多说,烤鸭先来三只,鸡腿来十个,她要吃一口,吐一口。
  • 不过是梦罢了

    不过是梦罢了

    一觉醒来,回到现实。过去的一切,只是一场梦吗?
  • 我爱你不负昭华

    我爱你不负昭华

    (1vs1双洁)在第一眼见到陆亦行的时候,叶星遥就知道自己已经无可救药的爱上了他。陆亦行是整个云国无人不知的商业奇才,是无数少女爱慕的对象。叶星遥是云国无人不知的女霸王,仗着叶老先生对她的喜爱整天到处调戏良家少男。就在大家都以为这两个人接触到时,叶小霸王却突然展开了对陆少男的猛烈追求,但是陆少男却丝毫没有反应。就在大家都暗自感慨陆亦行定力好的时候,陆大少却放出了两本红本本,这给了众人一沉重打击。
  • 天行

    天行

    号称“北辰骑神”的天才玩家以自创的“牧马冲锋流”战术击败了国服第一弓手北冥雪,被誉为天纵战榜第一骑士的他,却受到小人排挤,最终离开了效力已久的银狐俱乐部。是沉沦,还是再次崛起?恰逢其时,月恒集团第四款游戏“天行”正式上线,虚拟世界再起风云!
  • 我真的不想幸运了

    我真的不想幸运了

    被倒了八辈子霉的系统附身穿越,姜诚居然发现他倒过的霉,可以转化成修为提升实力,甚至是兑换功法秘籍,灵丹妙药,极品法宝……
  • 光痕剪影

    光痕剪影

    大学刚毕业的林痕坐着速度快到来不及欣赏光景的火车来到这里,以一个旅行者的身份在这座城市驻足,用年轻的心记录下发生过发生着的故事。这是一个有关青春和梦想,有关金钱和爱情,有关苦难和艰辛,有关这个时代和一群年轻人的故事。PS实际上是本人喜欢这种闷骚的简介,故事大体还是网文;喜欢都市的朋友可以进来。
  • 苍天剑尊

    苍天剑尊

    当一个修炼从来不知疲倦的废柴。在遇到一把神秘的宝剑之后。天赋大涨,实力大涨,顺带着,脾气也大涨。他是追求武道极限?还是享受金钱美女?楚锐道:“我统统都要,一个也不放过!~~”(老作者新笔名,请放心收藏。)
  • 严七海你不能爱我

    严七海你不能爱我

    一个一元硬币,让有着截然不同的生活背景的他和她认识,为了钱,她放下自尊为他打工,原本想着拿了钱之后就全身而退,可是越接触,就越觉得其实两个人原本就有太多的相似,当两个人以为可以迎来属于他们的小幸福的时候,命运却又给他们开了一个巨大的玩笑……