23、数据库工程师面试题(答案) 下载本文

考试时间:60分钟 开始时间: 结束时间: 日期: 年 月 日 姓 名: 总分:100分 得 分:

一、

填空题:(10空格,每空格3分,共30分)

1、 SQL Server 2000中使用的数据库对象包括: 表 、 视图 、 存储过程 、 函数 、 存储

过程 等。

2、 存储过程是一个 完成特定功能 的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可

以调用多次。

3、 索引就一种特殊的 对数据库中表的一列或者多列特定排序的结构 ,数据库的搜索引擎可以利用它加速对数据的检索。 4、 事务就是被绑定在一起作为一个 整体(单元) 的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失

败,以后操作就会 回滚 到操作前状态,或者是上有个节点。

5、 SQLServer2000中使用备份文件恢复数据库的写法是 RESTORE DATABASE XXXX FROM DISK = N'XXXX'

二、 简答题(每题5分,共30分)

ORACLE数据库中:

1.解释冷备份和热备份的不同点以及各自的优点

热备份针对归档模式的数据库,在数据库仍旧处于工作状态时进行备份。而冷备份指在数据库关闭后,进行备份,适用于所有模式的数据库。热备份的优点在于当备份时,数据库仍旧可以被使用并且可以将数据库恢复到任意一个时间点。冷备份的优点在于它的备份和恢复操作相当简单,并且由于冷备份的数据库可以工作在非归档模式下,数据库性能会比归档模式稍好。

2.你必须利用备份恢复数据库,但是你没有控制文件,该如何解决问题呢? 建控制文件,用带backup control file 子句的recover 命令恢复数据库。

3.如何转换init.ora到spfile? 使用create spfile from pfile 命令

4.解释data block , extent 和 segment的区别(这里建议用英文术语)

data block是数据库中最小的逻辑存储单元。当数据库的对象需要更多的物理存储空间时,连续的data block就组成了extent . 一个数据库对象拥有的所有extents被称为该对象的segment.

5.给出两个检查表结构的方法 1、DESCRIBE命令 2、DBMS_METADATA.GET_DDL 包

6.怎样查看数据库引擎的报错s

alert log 三、

SQL练习题(每题10分,共40分)

1. 编写SQL,已知关系模式:

s(s#,sname) c(c#,cname) sc(s#,c#,score) ① 找出选修了c1课程的学员; 方案一:

SELECT * FROM s

WHERE s# IN (SELECT s# FROM sc

WHERE c# = 'c1')

方案二:

SELECT * FROM s

WHERE EXISTS (SELECT * FROM sc

WHERE sc.c# = 'c1' AND sc.s# = s.s#)

方案三:

SELECT s.* FROM s, c, sc

WHERE s.sno = sc.sno AND c.cno = sc.cno AND c.cname = 'c1'

② 找出未选修c2课程的学员; 方案一:

SELECT * FROM s

WHERE s# NOT IN (SELECT s# FROM sc

WHERE c# = 'c2')

方案二:

SELECT * FROM s

WHERE NOT EXISTS (SELECT * FROM sc

WHERE sc.c# = 'c2' AND sc.s# = s.s#)

方案三:

SELECT s.sname FROM s, c, sc

WHERE s.sname = sc.sname AND c.cname = sc.cname AND c.cname NOT IN ( 'c1' )

③ 找出至少包含了s2选修了的课程的学员;

SELECT * FROM sc a WHERE NOT EXISTS (SELECT * FROM sc b WHERE s#='s2' AND NOT EXISTS (SELECT * FROM sc c WHERE b.c#=c.c# AND a.s#=c.c#))

④ 找出选修了所有课程的学员.

SELECT s# FROM sc GROUP BY s#

HAVING Count(s#) = (SELECT Count(s#)

FROM sc)

2、有订单表Order,单号字段RefNo VARCHAR(10),需要实现自动编号,格式为YYYYMMXXXX,其中XXXX为序号,如:2004050001,2004050002……2004059999等,采用SQL实现新订单编号的思路。 计算列 自定义函数都可以

3、如何删除表中重复Name字段的数据,用SQL写出代码。 Select * from Temp ID Name