ORACLE11g试题答案(陈冬亮)(6)

2018-12-03 19:37

不过truncate命令快规快,却不像delete命令那样对事务处理是安全的。因此,如果我们想要执行truncate删除的表正在进行事务处理,这个命令就会产生退出并产生错误信息。

2.有如下两个关系,其中雇员信息表关系EMP的主键是雇员号,部门信息表关系DEPT的主键是部门号。 EMP

雇员号(EMPNO) 雇员名(EMPNAME) 部门号(DEPTID) 001 010 056 101 DEPT

部门号(DEPTID) 01 02 03 04 部门名(DEPTNAME) 业务部 销售部 服务部 财务部 地址(ADDRESS) 1号楼 2号楼 3号楼 4号楼 张山 王宏达 马林生 赵敏 02 01 02 04 工资(SALARY) 2000 1200 1000 1500 向表插入雇员号为“100”,雇员名为“李四”,部门号为“02”的雇员信息

更新雇员号为“100”的薪水为2000 将薪水低于1200的雇员薪水加300元 删除部门号为“04”的部门

执行语句INSERT EMP VALUES(?020?,?王五?,?05?)会出现什么错误? 如何实现将部门号为“01”的部门删除? 解:

(1)DEPT表中的部门号(DEPTID)没有“05”的数据,外键部门号(DEPTID)的限制所致。 (2)先删除表EMP中部门号为“01”的数据。

3.已知一个员工表TBEmp,包含以下字段 列名称 id name sex birthday memo 数据类型 varchar2(10) varchar2(2) varchar2(10) date varchar2(100) 备注 代表员工号码,主键 代表员工名字,非空 代表员工性别 代表出生日期 代表员工备注 (1)创建员工表TBEmp

(2)增加一个字段salary,类型 number (3)删除表的memo字段

(4)把name字段长度改为100

(5) 插入以下数据(‘001’,‘陈四’,‘男’,‘1980-10-20’,NULL)

26

(6)查询有工资的员工信息

(7)查询名字中没有ac的员工姓名和出生日期 (8)查询工资在900到2300之间的员工信息 (9)查询女员工个数(性别为female的) (10)查询拿最高工资的员工信息

(11)按照员工年龄由高到低来排序,显示员工号码、姓名、出生日期(使用to_char函数,日期按照年/月/日时:分显示) to_char(birthday,?yyyy/mm/dd hh:mi:ss?) (12)将Jack的出生日期修改为1977-2-1,工资增加200元 (13)更新表格,在所有员工的号码后面加上?emp? (14)删除号码是e001和e002和e003的员工

(15)将员工的id和姓名连接起来使用别名newname来显示(语法select … as …from ..) (16)取出员工姓名的前三个字符、第三个字符、姓名长度 (17)使用create table… as …来创建tbemp的备份表格tbemp2 (18)使用两种方式删除所有员工 (19)删除TBEmp表格 解:(1)create table TBEmp

( id varchar2(10) not null PRIMARY KEY, name varchar2(2) not null, sex varchar2(10), birthday date,

memo varchar2(100));

comment on column TBEmp.id is 员工号''; comment on column TBEmp.name is '员工名称'; comment on column TBEmp.sex is '员工性别';

comment on column TBEmp.birthday is '出生日期'; comment on column TBEmp.memo is '员工备注'; (2)alter table TBEmp add SALARY number; (3)alter table TBEmp drop column memo;

(4)alter table TBEmp modify name varchar2(100); (5)INSERT INTO TBEmp(id,name,sex, birthday) VALUES(‘001’,‘陈四’,‘男’,‘1980-10-20’)

(6)SELECT * FROM TBEmp WHERE SALARY IS NOT NULL (7)SELECT name, birthday FROM TBEmp WHERE name NOT IN (SELECT name FROM TBEmp WHERE NAME LIKE ‘?%’)

(8)SELECT * FROM TBEmp WHERE SALARY BETWEEN 900 AND 2300 (9)SELECT COUNT(1) FROM TBEmp WHRE sex =’ female’

(10)SELECT * FROM TBEmp WHRE ID IN (SELECT ID FROM TBEmp WHERE SALARY =(SELECT MAX(SALARY) FROM TBEmp)) (11)SELECT id,name, birthday FROM TBEmp ORDER BY to_char(birthday,?yyyy/mm/dd hh:mi:ss?)

27

DESC

(12)UPDATE TBEmp SET birthday=? 1977-2-1?, SALARY= SALARY+200 WHERE name=? Jack?

(13)UPDATE TBEmp SET id=id+’emp’

(14)DELETE TBEmp WHERE id IN (‘e001?,?e002?,?e003’) (15)SELECT id+name AS newname FROM TBEmp

(16)SELECT SUBSTR(name,1,3),SUBSTR(name,3,1),LEN(name) FROM TBEmp (17)CREATE TABLE tbemp2 AS SELECT * FROM tbemp (18)DELETE TBEmp; TRUNCATE TABLE TBEmp (19)DROP TABLE TBEmp

第八章 索引

一、单项选择题

1.下面有关索引的描述正确的是( B )

A.不可以在多个列上创建复合索引。 B.可以在多个列上创建复合索引。 C.索引列中的数据不能重复出现。 D.索引列中的数据必须是数值型。

2.如果创建的表其主键可以自动编号,则应该为主键创建的索引是( A )索引。 A.反向索引 B.B树索引 C.位图索引 D.基于函数的索引 3.查看下面语句为( C )索引?

CREATE INDEX test_index ON student(sno,sname) TABLESPACE users STORAGE(INITIAL 64k,next 32k)

A.全局分区索引 B.位图索引 C.复合索引 D.基于函数的索引

4.假设emp表包含一个婚姻状况的字段,则应该在该字段上创建( D )索引。 A.B树唯一索引 B.B树不唯一索引 C. 基于函数的索引 D. 位图索引 5.如果经常执行类似于下面的查询语句SELECT * FROM STUDENT where substr(sname,0,2)=’陈’,应该为STUDENT表的SNAME列创建( C )索引。

A.B树唯一索引 B.B树不唯一索引 C. 基于函数的索引 D. 位图索引

28

6.下面关于约束与索引的说法不正确的是( D )

A.在字段上定义PRIMARY KEY约束时会自动创建B树唯一索引 B.在字段上定义UNIQUE约束时会自动创建一个B树唯一索引

C.默认情况下,禁用约束会删除对应的索引,而激活约束会自动重建相应的索引 D.定义FOREIGN KEY约束时会创建一个B树唯一索引。

7.假设在一个表的3个字段NAME、SEX和BIRTH中分别保存姓名、性别和出生年月数据,则应当为这三个字段分别创建( C )索引。 A.全部创建B树索引 B.全部创建位图索引

C.分别创建B树索引、位图索引和位图索引

D.分别创建B树索引、位图索引和给予函数的索引

8.使用ALTER INDEX?REBUILDER语句不可以执行下面的哪个任务?( C ) A.将反向键索引重建为普通索引 B.将一个索引移动到另一个表空间 C.将位图索引更改为普通索引

D.将一个索引分区移动到另一个表空间 9.关于索引描述不正确的是( B )

A.表是否具有索引不会影响到所使用的SQL的编写方式 B.在为表创建索引后,所有的查询操作都会使用索引 C.为表创建索引后,可以提高查询的执行速度

D.在为表创建索引后,Oracle优化器将根据具体情况决定是否采用索引。 10.列上创组合索引(也称为___B___)是在表的多个建的索引。 A. 压缩索引 B. 连接索引 C. 一致索引 D. 位图索引

二、填空题

1. 索引 对于查询的结果没有任何影响,但能加快对表执行SQL语句的速度,相应地也就提高了获取查询结果的速度。

2.在Oracle的索引类型中,最古老,同时也是最常用的就是 标准B树索引 ,在效率上通常会胜过简单查询。

3.如果表中某列的基数比较低,则应该在该列上创建 位图 索引。

4.如果要获得索引的使用情况,可以通过查询 V$OBJECT_USAGE 视图;而要获知索引的当前状态,可以查询 INDEX_STATS 视图。

5.在B树索引中通过在索引中保存排过序的 索引列值 与相对应记录的 ROWID 来实现快速查找。

6.在Oracle 11g中,可以使用 CREATE INDEX 语句创建索引。 三、问答题

1. 谈谈你对索引的认识? 解:

在关系型数据库中,索引是一种非常重要的模式对象,是一种与表有关的数据库结构,

29

它可以用来快速地寻找那些具有特定值的记录,使对应于表的SQL语句执行得更快。索引的作用相当于图书的目录,例如想要在一本书中找到有关方面的知识时,可以采用两种方法:一种方法是从书的开头向后逐页翻阅,这样需要翻阅全书才能找到所需要的知识内容;另一种方法是从书的目录中查找所需要的知识主题,然后根据目录中的页码找到所需要的知识内容。非常明显,采用第二种方法要比第一种方法查找要快。同样,如果一个表汇总包含很多记录,当没有建立索引,对表进行查询时,第一种方法执行查询时必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。第二种方法通过在表中建立类似于目录的索引,然后在索引中找到符合查询条件的索引值,最后就可以通过保存在索引中的ROWID(相当于页码)快速找到表中对应的记录,而无需扫描任何记录即可迅速得到目标记录所在的位置,这就是索引的作用。如果表有1000个记录,通过索引查找记录至少要比顺序扫描记录快100倍。

在Oracle中可以创建多种数据类型的索引,以适应各种表的特点,常用的索引类型有B树索引、反向键索引、位图索引、基于函数的索引、簇索引、全局和局部索引等。

2.使用索引查询一定能提高查询的性能吗?为什么? 解:

通常,通过索引查询数据比全表扫描要快.但是我们也必须注意到它的代价。

索引需要空间来存储,也需要定期维护, 每当有记录在表中增减或索引列被修改时,索引本身也会被修改. 这意味着每条记录的INSERT,DELETE,UPDATE将为此多付出4,5 次的磁盘I/O. 因为索引需要额外的存储空间和处理,那些不必要的索引反而会使查询反应时间变慢.使用索引查询不一定能提高查询性能,索引范围查询(INDEX RANGE SCAN)适用于两种情况:

(1)基于一个范围的检索,一般查询返回结果集小于表中记录数的30%宜采用; (2)基于非唯一性索引的检索。

索引就是为了提高查询性能而存在的,如果在查询中索引没有提高性能,只能说是用错了索引,或者讲是场合不同

3.ORACLE都有什么索引?分别适用于什么情况? 解:

常用的索引类型有B树索引、反向键索引、位图索引、基于函数的索引、簇索引、全局和局部索引等。

(1)B树索引:适合与大量的增、删、改,不能用包含OR操作符的查询;适合高基数的列(唯一值多),典型的树状结构;每个结点都是数据块;大多都是物理上一层、两层或三层不定,逻辑上三层;叶子块数据是排序的,从左向右递增;在分支块和根块中放的是索引的范围;

(2)反向键索引:建立一个反向索引将把每个列的键值(each column key value)按字节反向过来,对于组合键,列的顺序被保留,但每个列的字节都作了反向。反向键索引有它局限性:如果在WHERE语句中,需要对索引列的值进行范围性的搜索,如BETWEEN、<、>等,其反向键索引无法使用,此时,Oracle将执行全表扫描;只有对反向键索引列进行 <> 和 = 的

30


ORACLE11g试题答案(陈冬亮)(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2015年湖北省技能高考全省第一次联考文化综合试题及答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: