数据库试题

一、单选(每题2分)

1. 下列说法正确的是 ( C )
A. 复合索引中选择率低的应该放在第一位
B. 如果能够确保数据都在数据缓存中,大数据量全表扫描是可以接受的
C. 在查询条件的字段有索引情况下,也可能全表扫描。

D. 索引愈多查询性能愈好

2.关于RAID,下面说法正确的是 (  B)

A. RAID 1为硬盘条带,可以提高读写性能

B. 5块73G的硬盘组成RAID 5,可使用的空间为292G

C. RAID 0+1中一块硬盘损坏后,IO性能影响不大

D. RAID 0中一块硬盘损坏后,数据不丢失

3.有如下两个表EMP 和DEPT,表结构和数据如下:

EMP:

EMP_ID  EMP_NAME

----   ----   

1101    SMITH           

1102    ELLE           

1105    BLACK           

1103    SCOTT           

DEPT:

DEPT_ID   DEPT_NAME

-------------------

1101        市场   

1102        研发   

1103        行政   

1104        销售   

现在执行下列SQL语句

SELECT  A. EMP_NAME ,B.EDPT_NAME

FROM EMP A RIGHT JOIN DEPT B

ON A.DEPT_ID = B.DEPT_ID;

请问哪个输出结果是正确的(A )

A.

EMP_NAME   EDPT_NAME

---------- ----------

SMITH      市场

ELLE       研发

SCOTT      行政

           销售

B.

EMP_NAME   EDPT_NAME

---------- ----------

SMITH      市场

ELLE       研发

SCOTT      行政

BLACK     

C.

 EMP_NAME  EDPT_NAME

---------- ----------

SMITH      市场

ELLE       研发

BLACK      研发

SCOTT      行政

D.

EMP_NAME   EDPT_NAME

---------- ----------

SMITH      市场

ELLE       研发

BLACK      研发

SCOTT      行政

           销售

4. 何时使用“FULL OUTJOIN” ( C )

A.两个表都存在NULL值

B.想要返回两个集合的交集
C.想要返回两个集合的并集

D.想要返回两个集合的补集
E.想要返回两个集合的迪卡尔集

5. 在SQL语言中,一个基本表被删除,则与此基本表相关的下列内容中哪些也会被自动删除或失效?( D )

1)在此表中的数据          2)在此表上建立的索引          3)在此表上建立的视图

A. 1)和2)

B. 2)和3)

C. 1)和3)

D. 全部

6. 分析下面逻辑块

if  v_price > 1000  then

    v_new_prcie := v_price/2;

elsif v_price > 2000 then

    v_new_prcie := v_price/4;

elsif v_price > 4000 then

    v_new_prcie := v_price/5;

elsif v_price > 5000 then

    v_new_prcie := v_price/8;

else

    v_new_prcie := v_price/10;

end if;

如果v_prcie=8000 那么v_new_prcie 应该等于多少?( E )

A.    800

B.   1000

C.   1600

D.   2000

E.   4000

7. 关于事物粒度下列说法错误的是(A  )

A.程序中要尽可能多的使用commit,事物粒度越小越好;

B. 频繁COMMIT可能会造成程序性能降低,因为造成了log file sync事件的大量时间花费;

C. 频繁commit会造成UNDO覆盖,容易产生ORA-01555

D. 事物粒度过大会造成所等待时间延长及undo表空间不足

 

8. 当表的重复行数据很多时,应该创建的索引类型应该是( C )

A.B树

B.reverse

C.bitmap

D.函数索引

9. 在启动Oracle数据库实例的时候,下面操作的顺序如何排列?( C )

1)分配SGA

2)读取控制文件

3)读取redo文件

4)启动实例恢复

5)启动后台进程

6)检查数据文件的一致性

7)读取初始化参数文件

A.1,2,3,7,5,6,4

B.1,2,4,5,3,6,7
C.7,1,5,2,3,6,4

D.7,1,4,5,2,3,6
E.7,2,3,6,4,5,1

F.2,7,1,3,6,5,4

10. (单选)关于表和索引的描述,错误的是 ( C )
A. 表中插入新记录时,也会在索引中增加相应的记录。
B. drop表后,该表的所有索引也会被drop。

C. 索引不需要占用存储空间。
D. 删除表中的记录时,也会删除索引中相应的记录。

二、多选(每题3分,每题少选得1分,多选或错选均为0分)

1.下面哪语句属于DML语句(ACD );哪些属于DDL(BE )语句。

A. INSERT

B. CREATE 

C. UPDATE

D. SELECT 

E. TRUNCATE 

F. COMMIT

2.(多选)CAP理论,该理论包含以下 (ABC  )

A、Consistency 一致性

B、Availability 可用性 

C、Tolerance ofnetwork Partition 分区容忍性

D、Performance 高性能

3. 以下那些聚集函数是有效的 (CDE )

SQL> desc t_userinfo

Name      Type             Nullable

--------      ------------        --------   

USERID     NUMBER(5)       

USERNAME  VARCHAR2(20)  Y  

IDCARD     VARCHAR2(40)  Y  

BIRTHDAY  DATE 

A. sum(birthday)

B. avg(birthday)

C. count(birthday)

D. maximum(birthday)

E. min(birthday)

4. 下面哪些选项描述是正确的:( ACD)

A.  order by缺省排序查询显示结果是升序排列的。

B. 在order by 子句中不能用字段的别名。

C. 在group by 子句中不能用字段的别名。

D.  null值在升序排列中是被排列在所有非空值之后的。

E. 如果没有order by子句,查询结果将按照select列的第一个字段降序排列。

5. 优化OLTP SQL的措施一般有:(ABC )

A. 避免全表扫描

B. 合理建立索引

C. 选择恰当的连接方式

D. 增加表关联的个数

6. 对查询结果进行排序会一定程度地降低系统的性能,下列哪些操作用在SQL语句中会启动SQL引擎执行消耗系统资源的排序?( ABCDF)

供选择的答案:

A.  DISTINCT

B. MINUS

C. INTERSECT

D.  UNION

E.  UNION ALL

F.  ORDER BY

7. 在我们的日常工作中,合理的建立索引还不够,还需要在我们编写SQL语句是注意如何让我们编写的正确的使用索引,下列哪些选项能让我们正确使用上索引?( ABD)

A.  增加查询的范围,限制全范围的搜索。

B. 在索引列上进行运算操作,应把运算操作右移。

C. 利用hint 强制指定索引。

D.  避免不必要的类型转换,要了解“隐藏”的类型转换。

8. 关于AWR说法正确的是( ACD)

A.通过@ORACLE_HOME/rdbms/admin/addmrpt.sql脚本收集日志;

B. 取样时间段尽可能长;

C. 一般通过DB TIME 和Elapsed time 来衡量数据库负载;

D. AWR信息是有MMON 进程生成

9. 数据库中清除表中的数据并保留表student结构的SQL是( DE )

A. DROP TABLE student;

B. DROP TABLE student purge;

C. TRUNCATE TABLE student KEEP STRUCTURE;

D. TRUNCATE TABLE student REUSE STORAGE;

E. DELETE* FROM student ;

10. 以下关于设计说法正确的是:(ABCDEF )

A. 任何表的设计都要考虑到数据的删除策略,表中的数据不能无止境的增长而不删除

B. 严禁将业务数据放在系统表空间(system)中,必须有独立的表空间存放业务数据

C. 在不同业务系统共用同一个数据库时,要注意不同业务系统的对象必须存放在不同的用户下面,绝不能混放在同一用户下

D. 严禁使用sys/system用户存放任何业务数据

E. 不可以对表或索引指定并行度,如果使用Oracle并行处理方式(并行查询、并行DML),只能在具体语句中指定并行度

F. 表的设计必须满足第三范式(3NF),避免出现数据不一致。

三、问答题

1. 修改如下有错误的PL/SQL程序块(10分)

declare

vn_serv_id     number(11);

vn_loop        number(6);

cursor get_serv_id is  select serv_id  from serv;

begin

vn_loop = 0;

openget_serv_id; 

loop   

    fetch get_serv_id into :vn_serv_id; 

        exit when get_serv_id%notfound; 

        vn_loop++;     

    ifvn_loop >= 1000

      dbms_output.put[pgw1] (vn_loop);  

      end if;                 

 end loop[pgw2] ;

  

end ;

2. 简述ORACLE数据库响应用户修改数据操作的基本流程(20)

1,用户提交一个update语句
2,SERVER PROCESS检查内存缓存
      i 如果没有有效内存空间,启动DBWR,将缓存中未写入磁盘的脏数据块写入
      ii 如果有有效空间,从磁盘读入数据
3,在缓存内更新数据
    i 申请一个回滚段入口,将旧数据写入回滚段
    ii 加锁更新数据
    iii 并同时将修改记录在Redo log buffer 中
4,用户提交一个Commit
   i SCN增加
   ii 将Redo log buffer 写入Redo log file
   iii 告诉用户 Commit完成

1,相应事务分配回滚段(undo segment).
2,分配回滚段后,在回滚段头上创建事务表slot(transaction table slot).
3.创建事务表后会生出TXID(TransactionID),再将TXID分配给当前事务。这个值指向分给事务的回滚段头上存在的事务表的准确位置。
4.事务对象的数据块载入到高速缓冲区,在块头的ITL(Intersted transaction list)上登记事务条目。
如果itl上没有所需空间,就会发生等待enq:TX-allocate ITL entry。
5.将需要修改的块的修改信息存储到PGA,存储的方式是changevector,之后进程将PGA中的change vector以redo record复制到重做缓冲区。
6.将之前映像信息记录到撤销块,继而修改数据块,被修改的数据块变为脏状态。而且在高速缓冲区中创建以修改的数据块的CR块。
7.执行commit后给事务分配SCN,提交信息存储在重做缓冲区。
8.回滚段头的事务表中存储已成功提交的信息,结束包括TX锁在内的所有资源占有。
9.重做缓冲区的内容记录在重做日志文件上。

3.完成以下操作(20)

建表:

create table table_a(

studid   varchar2(10),--学号

studname   varchar2(40),--姓名

depart     varchar2(50),--系别

studscore varchar2(10) --学分

);

insert into

table_a(studid,studname,depart,studscore)

values ('08001','李明','计算机',80);

insert into

table_a(studid,studname,depart,studscore)

values ('08002','张三', '信息技术',95);

insert into

table_a(studid,studname,depart,studscore)

values ('08005','王五', '信息技术',96);

create table table_b (

studid  varchar2(10), --学号

studname   varchar2(40), --姓名

depart     varchar2(50), --系别

studscore varchar2(10)   --学分

);

insert into

table_b(studid,studname,depart,studscore)

values ('08001','李明','计算机',80);

insert into

table_b(studid,studname,depart,studscore)

values ('08002','张三', '信息技术',100);

insert into

table_a(studid,studname,depart,studscore)

values ('08003','李四','数学系',65);

insert into

table_a(studid,studname,depart,studscore)

values ('08004','张飞','英语系',77);


问题1:请将table_a 的studid字段建成唯一索引,写出sql语句。

Create unique index studid_index on table_a(studid);

问题2:请用table_b中姓名为张飞的学分更新table_a中姓名为李明的学分,写出sql语句。

Update table_a set studscore = (selectstudscore from table_a where studname = ‘张飞’) where studname = ‘李明’

问题3:请把table_a中的数据全部更新到table_b中,以学号,姓名及院系为KEY值,有则更新学分,无则插入,写出sql语句。

declare l_cnt number(10);

begin

for rs in (selectstudid,studname,depart,studscore from table_a)

loop

  select count(1) into l_cnt from table_b b where b.studid=rs.studid andb.studname=rs.studname and b.depart=rs.depart

   ifl_cnt>=1

    update table_b b set studscore=rs.studscore where b.studid=rs.studid andb.studname=rs.studname and b.depart=rs.depart

  else

    insert into table_b values(rs.studid,rs.studname,rs.depart,rs.studscore)

end loop;  

end;

merge into table_b b using table_a a

on ( a.studid=b.studud and a.studname=b.studname and a.depart = b.depart)

when matched then update set b.studscore =a.studscore

when not matched then insert values(a.studid,a.studname,a.depart,a.studscore)

问题4:请用命令对table_b扩展一个字段 studsex  varchar2(4),写出sql语句。

Alter table table_b add studsex varchar2(4)not null;

问题 5:建立一个视图v_table,要求是v_table 是table_a 和table_b的并集,当学号,姓名及院系一致时,而学分不一致时,以table_a学分为准。

Create view v_table as select Nvl(a.studid,b.studid) , Nvl(a.studname,b. studname), Nvl(a.depart,b. depart), Nvl(a.studscore,b. studscore)
From table_a a full join table_b b on a. studid =b. studid and a. studname = b. studname and a.depart = b.depart

问题 6:根据studid找出table_b中不存在table_a 的数据。

Select *

From table_b B where not exists (select 1from table_a A where A.studid=B.studid )


 [pgw1]Put_line

 [pgw2]close cursor

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值