一套数据库笔试题.docx

上传人:b****6 文档编号:6990373 上传时间:2023-01-15 格式:DOCX 页数:11 大小:20.06KB
下载 相关 举报
一套数据库笔试题.docx_第1页
第1页 / 共11页
一套数据库笔试题.docx_第2页
第2页 / 共11页
一套数据库笔试题.docx_第3页
第3页 / 共11页
一套数据库笔试题.docx_第4页
第4页 / 共11页
一套数据库笔试题.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

一套数据库笔试题.docx

《一套数据库笔试题.docx》由会员分享,可在线阅读,更多相关《一套数据库笔试题.docx(11页珍藏版)》请在冰豆网上搜索。

一套数据库笔试题.docx

一套数据库笔试题

一套数据库笔试题

(1)已知表T1中有2行数据,T2中有3行数据,执行SQL语句

“selecta.*fromT1a,T2b”后,返回的行数为______

A、2行

B、3行

C、5行

D、6行

多表查询没有指定连接条件,会导致笛卡尔积的出现,返回行数等于2张表的行数乘积,返回6行记录

考察:

对多表连接、笛卡尔积的理解

答案:

A

(2)、已知表T1和T2的字段定义完全相同,T1,T2中各有5条不同的数据,其中T1有2条数据存在于表T2中,语句“select*fromT1unionselect*fromT2”

返回的行数为_______

A、8行

B、10行

C、3行

D、12行

第二题UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。

考察:

UNION的理解

答案:

A

(3)、已知表T1含有字段ID、CourseID和Score,且数据为

IDCourseIDScore3190218522903280则语句“selectid,sum(ScorE)fromT1groupbyID”的执行结果为_________

A、IDsum(ScorE)

-

3170

2175

B、IDsum(ScorE)

-

2175

3170

C、IDsum(ScorE)

-

2170

3175

D、IDsum(ScorE)

-

3175

2170

第三题GROUPBY对按照ID字段进行分组,同时对ID相同字段的ScorE进行求和,GROUPby会自动对结果集进行排序所以答案选B

考察:

groupby的理解

答案:

B

(4)、电话号码表t_phonebook中含有100万条数据,其中号码字段PhoneNo上创建了唯一索引,且电话号码全部由数字组成,要统计号码头为321的电话号码的数量,下面写法执行速度最慢的是_________

A、selectcount(*)fromt_phonebookwherephoneno>=‘321’andphoneno

B、selectcount(*)fromt_phonebookwherephonenolike‘321%’

C、selectcount(*)fromt_phonebookwheresubstring(phoneno,1,3)=‘321’

A>或者

B:

LIKE通配符在XXX%情况下会应用索引,如果在%xxx%等情况下不会应用索引

答案:

C:

采用函数处理的字段不能利用索引,例如substr()这个题好像写成java的函数了

答案:

C

(5)、已知表tbl中字段land_ID建有索引,字段cust_id建有唯一索引,下列语句查询逻辑相同,其中执行效率最优的是

A、SELECT*FROMtbl

WHEREland_id>750

or(cust_id=180orcust_id=560)

B、SELECT*FROMtbl

WHERE(cust_id=180orcust_id=560)

orland_id>750

C、SELECT*FROMtblWHEREland_id>750

UNION

SELECT*FROMtblWHEREcust_id=180

UNION

SELECT*FROMtblWHEREcust_id=560

D、SELECT*FROMtblWHEREland_id>750

UNION

(SELECT*FROMtblWHEREcust_id=180

UNIONALL

SELECT*FROMtblWHEREcust_id=560

C/D相比较而言,D的执行效率更高一些

UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。

实际大部分应用中是不会产生重复的记录

采用UNIONALL操作符替代UNION,因为UNIONALL操作只是简单的将两个结果合并后就返回。

(6)、员工技能表Staffskill结构如下,Staff和Skill字段建有唯一约束

staffVARCHAR2(10),

skillVARCHAR2(10)

哪条语句可以查询同时拥有技能A和技能B的员工

A、selectstafffromStaffskillwhereskill=AORskill=B

B、selectstafffromStaffskillwhereskill=AANDskill=B

C、selectstafffromStaffskillwhereskill=AORskill=Bgroupbystaff

D、selectstafffromStaffskillwhereskill=AORskill=Bgroupbystaffhavingcount(*)>1

答案:

D

(7)员工表staff表结构如下

staffNovarchar2(10),

Emailvarchar2(50)

哪一个SQL语句查询出没有E_mail地址的员工号

A、selectstaffnofromStaffwhereEmail=NULL

B、selectstaffnofromStaffwhereEmailNULL

C、selectstaffnofromStaffwhereEmailisnull

D、selectstaffnofromStaffwhereEmailisnotnull

答案:

C

(8)Oracle数据库启动步骤的顺序为

1.Mount2.Open3.Nomount

A、3-1-2

B、2-3-1

C、2-1-3

D、3-2-1

答案:

A

(9)存在两个结构相同的数据库表T1(col1,col2,col3)、T2(col1,col2,col3),写出一SQL语句将所有T1数据导入到T2表

A、selectcol1,col2,col3fromT1INTOT2(col1,col2,col3)

B、INSERTT1(col1,col2,col3)INTOT2(col1,col2,col3)

C、insertintoT2(col1,col2,col3)ASselectcol1,col2,col3fromT1;

D、insertintoT2(col1,col2,col3)selectcol1,col2,col3fromT1;

答案:

D

10)一个表的字段为varchar2,如果建表时没有指定长度,则默认长度为:

A、1

B、25

C、38

D、255

E、4000

F、建表时varchar2类型字段必须指定长度

答案:

F

(11)用TRUNCATE和DELETE语句删除表中数据的区别

A、TRUNCATE命令不记录日志

B、TRUNCATE命令记录日志

C、DELETE命令不记录日志

答案:

A

(12)如下查询语句SELECTid_number,100/quantityfrominventory如果quantity为空,则查询语句的第二个字段将返回

A、aspace

B、anullvalue

C、avalueof0

D、avalueof100

E、thekeyworknull

答案:

B

(13)如下语句:

SELECTi.id_number,m.id_numberFROMinventoryi,manufacturerm

WHEREi.manufacturer_id=m.id_number

Orderbyinventory.description

执行时是错误的,请问以下措施哪个能够改正这个错误

A在orderby的子句中使用表的别名

B在where子句中去掉表的别名

C在where子句中用表名代替表的别名

D在orderby子句中去掉表名,只要字段名称即可

(如果2张表中,不同时存在字段名为description的话,D答案也是正确的)

答案:

A

14)A表字段a类型int中有100条记录,值分别为1至100。

如下语句

SELECTaFROMA

WHEREABETWEEN1AND50

OR(AIN(25,70,95)

ANDABETWEEN25AND75)

则如下哪个值在这个sql语句返回的结果集中

A、30B、51C、75D、95

答案:

A

15)变量v_time=‘23-MAY-00’,如下那条语句返回值为‘01-JAN-00’

ASELECTROUND(V_TIME,’DAY’)FROMDUAL;

BSELECTROUND(V_TIME,’YEAR’)FROMDUAL;

CSELECTROUND(V_TIME,’MONTH’)FROMDUAL;

DSELECTROUND(TO_CHAR(V_TIME,’YYYY’))FROMDUAL;

答案:

B

16)关于索引(index)的说法哪些是错误

A、创建索引能提高数据插入的性能

B、索引应该根据具体的检索需求来创建,在选择性好的列上创建索引

C、索引并非越多越好

D、建立索引可使检索操作更迅速

答案:

A

(17)指出下面sql语句的错误之处:

selectid_number“PartNumber”,sum(price)“price”frominventory

whereprice>50

groupby“PartNumber”

orderby2;

A、orderby2

B、frominventory

C、whereprice>50

D、groupby“PartNumber”

答案:

D

(18)如下语句

ifv_num>5then

v_example:

=1;

elsifv_num>10then

v_example:

=2;

elsifv_num

v_example:

=3;

elsifv_num

v_example:

=4;

elsev_example:

=5;

如果v_num=37,则v_example的值是多少

A、1B、2C、3D、4E、5

答案:

A

(19)如下语句:

begin

foriin1..8loop

ifi=2then

null;

else

ifi=5then

rollback;

else

ifi=8then

commit;

else

insertintotexample(A)values(i);

endif;

endif;

endif;

endloop;

commit;

end;

执行该语句后将有几条记录插入到表texample表中

A=1B=2C=3D=4

答案:

B

(20)设计一表结构,某字段要求存放员工编号,为固定10位长字符,采用哪种类型字段

A、CHAR

B、LONG

C、VARCHAR

D、varray

答案:

A

二、填空编程题

(1)、已知T1包含字段ID、ID2,T2包含字段ID,请在空白处完成SQL语句,查询表T1字段ID2取值存在于T2的ID取值集合中。

select*fromT1Awhere______(select*fromT2BwhereB.ID=A.ID2)

select*fromT1AwhereA.ID______(selectIDfromT2B)

selectA.*fromT1A,T2BwhereA.ID2______B.ID

答案:

1)ID2in2)3)=

select*fromT1Awhere_Exists_____(select*fromT2BwhereB.ID=A.ID2)

select*fromT1AwhereA.ID__in____(selectIDfromT2B)

selectA.*fromT1A,T2BwhereA.ID2__=____B.ID

(2)Oracle创建表时指定了以下的存储参数:

initial50K

next20K

pctincrease10

则这个表第三次扩展分配的空间大小为__________

答案:

22k

(3)、已知表T1包含字段ID,对同一个ID的取值,可能存在多条数据,请在空白处完成SQL语句,查询T1中对应有大于1条数据ID及其对应数据的条数。

selectID,count(*)fromT1groupbyID___________________

答案:

HAVINGCOUNT(*)>1

(4)、已知表T1、T2和T3的结构和数据如下

T1

NameIDCourseIDScore1190128521752295T2

IDCourse1数学2语文T3

IDName1张三2李四请写出查询的SQL语句,使得查询的结果为:

NameCourseScore

张三数学90

张三语文85

李四数学75

李四语文95

答案:

selectName,Course,ScorefromT1,T2,T3whereT3.ID=T1.NameIDandT1.CourseID=T2.ID

(5)、为了统计图书馆的每天的借出和还书的次数,定义了表T1,结构如下

字段名称类型说明DateStrvarchar(10)日期OprTypeinteger操作类型,0代表借,1代表还OprCountinteger操作次数已知表中没有数据,请写一个更新T1表的存储过程,每一个借出或还书的操作都调用该存储过程来更新统计数据,输入参数为:

操作时间,操作类型。

答案(T-SQL):

利用存储过程查找看本日期和操作类型有没有数据,如果没有则插入数据,如果有则更新数据使操作次数加1

createorreplaceprocedureupdate_pro(v_DateStrinvarchar,v_OprTypeininteger)as

vv_DateStrT1.DateStr%type;

vv_OprTypeT1.OprType%type;

cursormy_cursoris(selectDateStr,OprType,OprCountfromT1whereDateStr=v_DateStrandOprType=v_OprType);声明游标

begin

openmy_cursor;

fetchmy_cursorintovv_DateStr,vv_OprType;

ifmy_cursor%notfoundthen

insertintoT1(DateStr,OprType,OprCount)values(v_DateStr,v_OprType,1);

else

updateT1setOprCount=OprCount+1whereDateStr=v_DateStrandOprType=v_OprType;

endif;

commit;

closemy_cursor;

end;

(6)、表T1中有字段Field1,类型为varchar(20),请在T1上创建一个约束,保证Field1的前三个字符的取值为“aaa”、“bbb”或者“ccc”。

答案:

答案:

ALTERTABLET1

ADDCONSTRAINTSCHK_FILEDCHECK(Field1like‘aaa%’orField1like

‘bbb%’orField1like‘ccc%’);

想不出更加简练的表达式,或许还有更好实现发放

(7)、某大型商场的数据库中有一个日志表t_Log,它记录了每日的商品交易日志,t_Log包含了字段LogDatetime记录日志的生成时间,每日的日志数据为20,000-40,000条之间。

后发现日志表数据量过于庞大,需要删除6个月前的历史日志数据约3,000,000行。

请综合考虑性能等因素,写出删除历史数据的SQL语句。

答案(T-SQL):

此题应用存储过程分批删除并提交,如下是每次删除10000

createorreplaceprocedureDel_proas

v_BooleanBoolean:

=true;

v_countinteger:

=0;

begin

whilev_Booleanloop

deletefromt_LogwhereAdd_months(LogDateTime,6)

commit;

selectcount(*)intov_countfromt_logwhereAdd_months(LogDateTime,6)

ifv_count=0then

v_Boolean=false;

endif;

endloop;

end;

数据量比较大的情况,可以考虑分批删除,效率会高一些。

可使用循环控制语句中,使用rownum

(8)、请写出oracle的SGA区的几个组成部分(只写出4个主要部分即可)。

答案:

Sharedpool(共享池),DataBaseBufferCache(数据缓冲区)

RedoLogBuffer(重做日志缓冲区),LargePool

(9)、请写出ORACLE数据库表空间中的区管理(EXTENTMANAGEMENT)两种方式。

答案:

字典管理方式和本地管理方式

(10)、请写出你所知道的几个需要排序的DML的操作。

Select语句

Orderby

另外在查询语句中where子句中,判断函数尽量不要放在左边

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1