文档库 最新最全的文档下载
当前位置:文档库 › 数据库工程师面试题514

数据库工程师面试题514

数据库工程师面试题514
数据库工程师面试题514

数据库工程师面试题

Lyven SQL数据库开发5月14日

(点击上方蓝色字,可快速关注我们哦)

选择题:(每空2分共18分)

1、在MS SQL Server中,用来显示数据库信息的系统存储过程是()

A sp_ dbhelp

B sp_ db

C sp_ help

D sp_ helpdb

2、SQL语言中,删除一个表的命令是()

A DELETE

B DROP

C CLEAR

D REMORE

3、关系数据库中,主键是(__)

A、为标识表中唯一的实体

B、创建唯一的索引,允许空值

C、只允许以表中第一字段建立

D、允许有多个主键的

4、在Transact-SQL语法中,SELECT语句的完整语法较复杂,但至少包括的部分(1___),使用关键字(2___)可以把重复行屏蔽,将多个查询结果返回一个结果集合的运算符是(3___),如果在SELECT语句中使用聚合函数时,一定在后面使用(4___)。

⑴A、SELECT,INTO B、SELECT,FROM

C、SELECT,GROUP

D、仅SELECT

⑵A、DISTINCT B、UNION

C、ALL C、TOP

⑶A、JOIN B、UNION

C、INTO C、LIKE

⑷A、GROUP BY B、COMPUTE BY

C、HAVING

D、COMPUTE

5、语句DBCC SHRINKDATABASE (Sample, 25)中的25表示的意思是

A、25M

B、剩余占整个空间的25%

C、已用空间占整个空间的25%

D、以上都不对

6、你是一个保险公司的数据库开发人员,公司的保单信息存储在SQL Server 2000数据库中,你使用以下脚本建立了一个名为Policy的表:

CREATE TABLE Policy

PolicyNumber int NOT NULL DEFAULT (0),

InsuredLastName char (30) NOT NULL,

InsuredFirstName char (20) NOT NULL,

InsuredBirthDate datetime NOT NULL,

PolicyDate datetime NOT NULL,

FaceAmount money NOT NULL,

CONSTRAINT PK_Policy PRIMARY KEY (PolicyNumber)

)

每次公司销售出一份保单,Policy表中就增加一条记录,并赋予其一个新的保单号,你将怎么做?

a.建立一个INSTEAD OF INSERT触发器来产生一个新的保单号,并将这个保单号插入数据表中。

b.建立一个INSTEAD OF UPDATE触发器来产生一个新的保单号,并将这个保单号插入数据表中。

c.建立一个AFTER UPDATE触发器来产生一个新的保单号,并将这个保单号插入数据表中。

d.用AFTER UPDATE触发器替代DEFAULT约束条件产生一个新的保单号,并将这个保单号插入数据表中。

7、在SQL语言中,如果要建立一个工资表包含职工号,姓名,职称。工资等字段。若要保证工资字段的取值不低于800元,最合适的实现方法是:

A。在创建工资表时为”工资“字段建立缺省

B。在创建工资表时为”工资“字段建立检查约束

C。在工资表建立一个触发器

D。为工资表数据输入编写一个程序进行控制

8、Select 语句中用来连接字符串的符号是______.

A. “+”

B. “&”

C.“||”

D.“|”

9、你是一个出版公司的数据库开发人员,对特定的书名的每天的销售情况建立了如下的存储过程:

CREATE PROCEDURE get_sales_for_title

title varchar(80), @ytd_sales int OUTPUT

AS

SELECT @ytd_sales = ytd_sales

FROM titles

WHERE title = @title

IF @@ROWCOUNT = 0

RETURN(-1)

ELSE

RETURN(0)

另外建立了一个脚本执行这个存储过程,如果执行成功,将返回对应于书名的每天的销售情况的报表,如果执行失败,将返回“No Sales Found”,怎样建立这个脚本?

A. DECLARE @retval int

DECLARE @ytd int

EXEC get_sales_for_title ‘Net Etiquette’, @ytd

IF @retval < 0

PRINT ‘No sales found’

ELSE

PRINT ‘Year to date sales: ’+ STR (@ytd)

GO

B. DECLARE @retval int

DECLARE @ytd int

EXEC get_sales_for_title ‘Net Etiquette’, @ytd OUTPUT

IF @retval < 0

PRINT ‘No sales found’

ELSE

PRINT ‘Year to date sales: ’+ STR (@ytd)

GO

C. DECLARE @retval int

DECLARE @ytd int

EXEC get_sales_for_title ‘Net Etiquette’,@retval OUTPUT

IF @retval < 0

PRINT ‘No sales found’

ELSE

PRINT ‘Year to date sales: ’+ STR (@ytd)

GO

D. DECLARE @retval int

DECLARE @ytd int

EXEC @retval = get_sales_for_title ‘Net Etiquette’, @ytd OUTPUT

IF @retval < 0

PRINT ‘No sales found’

ELSE

PRINT ‘Year to date sales: ’+ STR (@ytd)

GO

简答题:(共40分)

1、(5分)使用一条SQL语句找到重复的值及重复的次数:有一数据表ZD_ks,其中有字段BM,MC等,请查询出在ZD_ks中BM有重复的值及重复的次数,没有的不要列出。如下表:BM DUPCOUNT

001 3

002 2

2、描述(5分)

表1 student 学生信息表

ID int 学生编号

Name varchar 学生姓名

Sex bit 性别(男0女1)

Class int 班级编号

表2 schedule 课程信息表

ID int 课程编号

Name varchar 课程名称

表3 Grade 成绩信息表

ID int 自动编号

UID int 学生编号

SID int 课程编号

Num int 考试成绩

(a)求各班的总人数(1分)

(b)求1班女生和男生的平均成绩(2分)

(c)各班"数据结构"(课程名称)不及格的人数(2分)

3、问题描述:(30分)

本题用到下面三个关系表:

CARD 借书卡。CNO 卡号,NAME 姓名,CLASS 班级

BOOKS 图书。BNO 书号,BNAME 书名,AUTHOR 作者,PRICE 单价,QUANTITY 库存册数

BORROW 借书记录。CNO 借书卡号,BNO 书号,RDATE 还书日期

备注:限定每人每种书只能借一本;库存册数随借书、还书而改变。

要求实现如下15个处理:

1.找出借书超过5本的读者,输出借书卡号及所借图书册数。(2分)

2.查询借阅了"水浒"一书的读者,输出姓名及班级。(3分)

3.查询过期未还图书,输出借阅者(卡号)、书号及还书日期。(3分)

4.查询书名包括"网络"关键词的图书,输出书号、书名、作者。(2分)

5.查询现有图书中价格最高的图书,输出书名及作者。(2分)

6.查询当前借了"计算方法"但没有借"计算方法习题集"的读者,输出其借书卡号,并按卡号降序排序输出。(4分)

7.将"C01"班同学所借图书的还期都延长一周。(2分)

8.从BOOKS表中删除当前无人借阅的图书记录。(2分)

9.在BORROW表上建立一个触发器,完成如下功能:如果读者借阅的书名是"数据库技术及应用",就将该读者的借阅记录保存在BORROW_SAVE表中(注ORROW_SAVE表结构同BORROW表)。(4分)

10.建立一个视图,显示"力01"班学生的借书信息(只要求显示姓名和书名)。(3分) 11.查询当前同时借有"计算方法"和"组合数学"两本书的读者,输出其借书卡号,并按卡号升序排序输出。(3分)

答案(仅供)

选择题

1、D

2、B

3、A

4 、⑴B,⑵A,⑶B,⑷A

5、B 6、A7、B

8、A9、D

简答题

1、

create table ZD_ks(BM varchar(10),mc varchar(10),age int)

insert into ZD_ks(bm,mc,age) values('001','张三',1)

insert into ZD_ks(bm,mc,age) values('001','李四',2)

insert into ZD_ks(bm,mc,age) values('001','王五',3)

insert into ZD_ks(bm,mc,age) values('002','赵六',1)

insert into ZD_ks(bm,mc,age) values('002','钱七',2)

insert into ZD_ks(bm,mc,age) values('003','孙八',1)

go

select BM,count(*) as DUPCOUNT from zd_ks group by bm having count(*) > 1 drop table zd_ks

2、

(1)

select Class,count(1) as num from student group by Class

(2)

select S.Sex,avg(G.Num) as Num

from student S,Grade G

where S.ID=G.ID and S.Class=1

group by S.Sex

(3)

select S.Class,count(1) as num

from student S,Grade G,schedule SC

where S.ID=G.ID and G.SID =Sc.ID and https://www.wendangku.net/doc/ff13767045.html,='数据结构' and Sc.Num<60 group by S.Class

3、

1. 找出借书超过5本的读者,输出借书卡号及所借图书册数

--实现代码:

SELECT CNO,借图书册数=COUNT(*)

FROM BORROW

GROUP BY CNO

HAVING COUNT(*)>5

2. 查询借阅了"水浒"一书的读者,输出姓名及班级

--实现代码:

SELECT * FROM CARD c

WHERE EXISTS(

SELECT * FROM BORROW a,BOOKS b

WHERE a.BNO=b.BNO

AND b.BNAME=N'水浒'

AND https://www.wendangku.net/doc/ff13767045.html,O=https://www.wendangku.net/doc/ff13767045.html,O)

3. 查询过期未还图书,输出借阅者(卡号)、书号及还书日期

--实现代码:

SELECT * FROM BORROW

WHERE RDATE

4. 查询书名包括"网络"关键词的图书,输出书号、书名、作者

--实现代码:

SELECT BNO,BNAME,AUTHOR FROM BOOKS

WHERE BNAME LIKE N'%网络%'

5. 查询现有图书中价格最高的图书,输出书名及作者

--实现代码:

SELECT BNO,BNAME,AUTHOR FROM BOOKS

WHERE PRICE=(

SELECT MAX(PRICE) FROM BOOKS)

6. 查询当前借了"计算方法"但没有借"计算方法习题集"的读者,输出其借书卡号,并按卡号降序排序输出

--实现代码:

SELECT https://www.wendangku.net/doc/ff13767045.html,O

FROM BORROW a,BOOKS b

WHERE a.BNO=b.BNO AND b.BNAME=N'计算方法'

AND NOT EXISTS(

SELECT * FROM BORROW aa,BOOKS bb

WHERE aa.BNO=bb.BNO

AND bb.BNAME=N'计算方法习题集'

AND https://www.wendangku.net/doc/ff13767045.html,O=https://www.wendangku.net/doc/ff13767045.html,O)

ORDER BY https://www.wendangku.net/doc/ff13767045.html,O DESC

7. 将"C01"班同学所借图书的还期都延长一周

--实现代码:

UPDATE b SET RDATE=DATEADD(Day,7,b.RDATE)

FROM CARD a,BORROW b

WHERE https://www.wendangku.net/doc/ff13767045.html,O=https://www.wendangku.net/doc/ff13767045.html,O

AND a.CLASS=N'C01'

8. 从BOOKS表中删除当前无人借阅的图书记录

--实现代码:

DELETE A FROM BOOKS a

WHERE NOT EXISTS(

SELECT * FROM BORROW

WHERE BNO=a.BNO)

9. 在BORROW表上建立一个触发器,完成如下功能:如果读者借阅的书名是"数据库技术及应用",就将该读者的借阅记录保存在BORROW_SAVE表中(注ORROW_SAVE表结构同BORROW表)

--实现代码:

CREATE TRIGGER TR_SAVE ON BORROW

FOR INSERT,UPDATE

AS

IF @@ROWCOUNT>0

INSERT BORROW_SAVE SELECT i.*

FROM INSERTED i,BOOKS b

WHERE i.BNO=b.BNO

AND b.BNAME=N'数据库技术及应用'

10. 建立一个视图,显示"力01"班学生的借书信息(只要求显示姓名和书名)

--实现代码:

CREATE VIEW V_VIEW

AS

SELECT https://www.wendangku.net/doc/ff13767045.html,,b.BNAME

FROM BORROW ab,CARD a,BOOKS b

WHERE https://www.wendangku.net/doc/ff13767045.html,O=https://www.wendangku.net/doc/ff13767045.html,O

AND ab.BNO=b.BNO

AND a.CLASS=N'力01'

11. 查询当前同时借有"计算方法"和"组合数学"两本书的读者,输出其借书卡号,并按卡号升序排序输出

--实现代码:

SELECT https://www.wendangku.net/doc/ff13767045.html,O

FROM BORROW a,BOOKS b

WHERE a.BNO=b.BNO

AND b.BNAME IN(N'计算方法',N'组合数学')

GROUP BY https://www.wendangku.net/doc/ff13767045.html,O

HAVING COUNT(*)=2 ORDER BY https://www.wendangku.net/doc/ff13767045.html,O DESC

相关文档