一套数据库笔试题

1、选择题

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

“select a.* from T1 a,T2 b”后,返回的行数为______

A、2行

B、3行

C、5行

D、6行

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

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

答案:A

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

返回的行数为_______

A、8行

B、10行

C、3行

D、12行

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

考察:UNION 的理解

答案: A

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

IDCourseIDScore3190218522903280则语句“select id,sum(ScorE) from T1 group by ID”的执行结果为_________

A、 ID           sum(ScorE)

—–        ———-

3            170

2            175

B、 ID           sum(ScorE)

—–        ———-

2            175

3            170

C、 ID           sum(ScorE)

—–        ———-

2            170

3            175

D、 ID           sum(ScorE)

—–        ———-

3            175

2                 170

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

考察:group by 的理解

答案: B

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

A、 select count(*) from t_phonebook where phoneno >= ‘321’ and phoneno < ‘321A’

B、 select count(*) from t_phonebook where phoneno like ‘321%’

C、 select count(*) from t_phonebook where substring(phoneno,1,3) = ‘321’

A>或者<操作符会采用索引查找

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

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

答案: C

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

A、 SELECT * FROM tbl

WHERE land_id > 750

or (cust_id=180 or cust_id=560)

B、 SELECT * FROM tbl

WHERE (cust_id=180 or cust_id=560)

or land_id > 750

C、 SELECT * FROM tbl WHERE land_id > 750

UNION

SELECT * FROM tbl WHERE cust_id = 180

UNION

SELECT * FROM tbl WHERE cust_id = 560

D、 SELECT * FROM tbl WHERE land_id > 750

UNION

(   SELECT * FROM tbl WHERE cust_id = 180

UNION ALL

SELECT * FROM tbl WHERE cust_id = 560

)

 

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

UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。实际大部分应用中是不会产生重复的记录

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

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

staff   VARCHAR2(10),

skill   VARCHAR2(10)

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

A、 select staff from Staffskill where skill=’A’ OR skill=’B’

B、 select staff from Staffskill where skill=’A’ AND skill=’B’

C、 select staff from Staffskill where skill=’A’ OR skill=’B’ group by staff

D、 select staff from Staffskill where skill=’A’ OR skill=’B’ group by staff having count(*)>1

答案:D

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

staffNo   varchar2(10),

Email     varchar2(50)

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

A、select staffno from Staff where Email = NULL

B、select staffno from Staff where Email NULL

C、select staffno from Staff where Email is null

D、select staffno from Staff where Email is not null

答案: C

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

1.Mount  2.Open  3.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、select col1,col2,col3 from T1 INTO T2 (col1,col2,col3)

B、INSERT T1 (col1,col2,col3) INTO T2(col1,col2,col3)

C、insert into T2 (col1,col2,col3) AS select col1,col2,col3 from T1;

D、insert into T2 (col1,col2,col3) select col1,col2,col3 from T1;

答案: 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)如下查询语句SELECT id_number,100/quantity from inventory如果quantity为空,则查询语句的第二个字段将返回

A、 a space

B、 a null value

C、 a value of 0

D、 a value of 100

E、 the keywork null

答案:B

(13)如下语句:SELECT i.id_number,m.id_number FROM inventory i,manufacturer m

WHERE i.manufacturer_id = m.id_number

Order by inventory.description

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

A 在order by的子句中使用表的别名

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

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

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

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

答案:A

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

SELECT a FROM A

WHERE A BETWEEN 1 AND 50

OR (A IN (25,70,95)

AND A BETWEEN 25 AND 75)

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

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

答案:A

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

A SELECT ROUND(V_TIME,’DAY’) FROM DUAL;

B SELECT ROUND(V_TIME,’YEAR’) FROM DUAL;

C SELECT ROUND(V_TIME,’MONTH’) FROM DUAL;

D SELECT ROUND(TO_CHAR(V_TIME,’YYYY’)) FROM DUAL;

答案:B

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

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

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

C、索引并非越多越好

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

答案: A

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

select id_number “Part Number”,sum(price) “price” from inventory

where price > 50

group by “Part Number”

order by 2;

A、order by 2

B、from inventory

C、 where price > 50

D、group by “Part Number”

答案:D

(18)如下语句

if v_num > 5 then

v_example := 1;

elsif v_num > 10 then

v_example := 2;

elsif v_num < 20 then

v_example := 3;

elsif v_num < 39 then

v_example := 4;

else  v_example := 5;

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

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

答案:A

(19)如下语句:

begin

for i in 1..8 loop

if i=2 then

null;

else

if i=5 then

rollback;

else

if i =8  then

commit;

else

insert into texample(A) values(i);

end if;

end if;

end if;

end loop;

commit;

end;

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

A=1           B=2              C=3             D=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 * from T1 A where ______ (select * from T2 B where B.ID = A.ID2)

select * from T1 A where A.ID ______ (select ID from T2 B)

select A.* from T1 A, T2 B where A.ID2 ______ B.ID

答案: 1)ID2 in  2)      3) =

select * from T1 A where _ Exists_____ (select * from T2 B where B.ID = A.ID2)

select * from T1 A where A.ID __in____ (select ID from T2 B)

select A.* from T1 A, T2 B where A.ID2 __=____ B.ID

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

initial  50K

next   20K

pctincrease 10

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

答案:22k

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

select ID,count(*) from T1 group by ID ___________________

答案: HAVING COUNT(*)>1

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

T1

NameIDCourseIDScore1190128521752295T2

IDCourse1数学2语文 T3

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

Name         Course        Score

——–     ——–      ——–

张三         数学          90

张三         语文          85

李四         数学          75

李四         语文          95

答案: select Name,Course,Score from T1,T2,T3 where T3.ID=T1.NameID and T1.CourseID=T2.ID

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

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

答案(T-SQL):

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

create or replace procedure update_pro(v_DateStr in varchar,v_OprType in integer) as

vv_DateStr T1.DateStr%type;

vv_OprType T1.OprType%type;

cursor my_cursor is(select DateStr,OprType,OprCount from T1 where DateStr= v_DateStr and OprType= v_OprType);–声明游标

begin

open my_cursor;

fetch my_cursor into vv_DateStr,vv_OprType;

if my_cursor%notfound then

insert into T1(DateStr,OprType,OprCount) values(v_DateStr,v_OprType,1);

else

update T1 set OprCount=OprCount+1 where DateStr=v_DateStr and OprType=v_OprType;

end if;

commit;

close my_cursor;

end;

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

答案:答案:ALTER TABLE T1

ADD CONSTRAINTS CHK_FILED CHECK (Field1 like‘aaa%’or Field1 like

‘bbb%’or Field1 like ‘ccc%’);

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

(7)、某大型商场的数据库中有一个日志表t_Log,它记录了每日的商品交易日志,t_Log包含了字段LogDatetime记录日志的生成时间,每日的日志数据为20,000-40,000条之间。后发现日志表数据量过于庞大,需要删除6个月前的历史日志数据约3,000,000行。请综合考虑性能等因素,写出删除历史数据的SQL语句。

答案(T-SQL):此题应用存储过程分批删除并提交,如下是每次删除10000

create or replace procedure Del_pro as

v_Boolean Boolean :=true;

v_count integer :=0;

begin

while v_Boolean loop

delete from t_Log where Add_months(LogDateTime,6)<sysdate and rownum<10000;

commit;

select count(*) into v_count from t_log  where Add_months(LogDateTime,6)<sysdate;

if v_count=0 then

v_Boolean=false;

end if;

end loop;

end;

数据量比较大的情况,可以考虑分批删除,效率会高一些。可使用循环控制语句中,使用rownum<10000来分300次来删除。注意每次删除后commit。

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

答案:Shared pool(共享池),DataBase Buffer Cache(数据缓冲区)

Redo Log Buffer(重做日志缓冲区), Large Pool

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

答案:字典管理方式和本地管理方式

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

Select 语句

Order by

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

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值