数据库工程师面试题514.docx
《数据库工程师面试题514.docx》由会员分享,可在线阅读,更多相关《数据库工程师面试题514.docx(13页珍藏版)》请在冰豆网上搜索。
数据库工程师面试题514
数据库工程师面试题
LyvenSQL数据库开发5月14日
(点击上方蓝色字,可快速关注我们哦)
选择题:
(每空2分共18分)
1、在MSSQLServer中,用来显示数据库信息的系统存储过程是()
Asp_dbhelp
Bsp_db
Csp_help
Dsp_helpdb
2、SQL语言中,删除一个表的命令是()
ADELETE
BDROP
CCLEAR
DREMORE
3、关系数据库中,主键是(__)
A、为标识表中唯一的实体
B、创建唯一的索引,允许空值
C、只允许以表中第一字段建立
D、允许有多个主键的
4、在Transact-SQL语法中,SELECT语句的完整语法较复杂,但至少包括的部分(1___),使用关键字(2___)可以把重复行屏蔽,将多个查询结果返回一个结果集合的运算符是(3___),如果在SELECT语句中使用聚合函数时,一定在后面使用(4___)。
⑴A、SELECT,INTOB、SELECT,FROM
C、SELECT,GROUPD、仅SELECT
⑵A、DISTINCTB、UNION
C、ALLC、TOP
⑶A、JOINB、UNION
C、INTOC、LIKE
⑷A、GROUPBYB、COMPUTEBY
C、HAVINGD、COMPUTE
5、语句DBCCSHRINKDATABASE(Sample,25)中的25表示的意思是
A、25M
B、剩余占整个空间的25%
C、已用空间占整个空间的25%
D、以上都不对
6、你是一个保险公司的数据库开发人员,公司的保单信息存储在SQLServer2000数据库中,你使用以下脚本建立了一个名为Policy的表:
CREATETABLEPolicy
(
PolicyNumberintNOTNULLDEFAULT(0),
InsuredLastNamechar(30)NOTNULL,
InsuredFirstNamechar(20)NOTNULL,
InsuredBirthDatedatetimeNOTNULL,
PolicyDatedatetimeNOTNULL,
FaceAmountmoneyNOTNULL,
CONSTRAINTPK_PolicyPRIMARYKEY(PolicyNumber)
)
每次公司销售出一份保单,Policy表中就增加一条记录,并赋予其一个新的保单号,你将怎么做?
a.建立一个INSTEADOFINSERT触发器来产生一个新的保单号,并将这个保单号插入数据表中。
b.建立一个INSTEADOFUPDATE触发器来产生一个新的保单号,并将这个保单号插入数据表中。
c.建立一个AFTERUPDATE触发器来产生一个新的保单号,并将这个保单号插入数据表中。
d.用AFTERUPDATE触发器替代DEFAULT约束条件产生一个新的保单号,并将这个保单号插入数据表中。
7、在SQL语言中,如果要建立一个工资表包含职工号,姓名,职称。
工资等字段。
若要保证工资字段的取值不低于800元,最合适的实现方法是:
A。
在创建工资表时为”工资“字段建立缺省
B。
在创建工资表时为”工资“字段建立检查约束
C。
在工资表建立一个触发器
D。
为工资表数据输入编写一个程序进行控制
8、Select语句中用来连接字符串的符号是______.
A.“+”B.“&”C.“||”D.“|”
9、你是一个出版公司的数据库开发人员,对特定的书名的每天的销售情况建立了如下的存储过程:
CREATEPROCEDUREget_sales_for_title
titlevarchar(80),@ytd_salesintOUTPUT
AS
SELECT@ytd_sales=ytd_sales
FROMtitles
WHEREtitle=@title
IF@@ROWCOUNT=0
RETURN(-1)
ELSE
RETURN(0)
另外建立了一个脚本执行这个存储过程,如果执行成功,将返回对应于书名的每天的销售情况的报表,如果执行失败,将返回“NoSalesFound”,怎样建立这个脚本?
A.DECLARE@retvalint
DECLARE@ytdint
EXECget_sales_for_title‘NetEtiquette’,@ytd
IF@retval<0
PRINT‘Nosalesfound’
ELSE
PRINT‘Yeartodatesales:
’+STR(@ytd)
GO
B.DECLARE@retvalint
DECLARE@ytdint
EXECget_sales_for_title‘NetEtiquette’,@ytdOUTPUT
IF@retval<0
PRINT‘Nosalesfound’
ELSE
PRINT‘Yeartodatesales:
’+STR(@ytd)
GO
C.DECLARE@retvalint
DECLARE@ytdint
EXECget_sales_for_title‘NetEtiquette’,@retvalOUTPUT
IF@retval<0
PRINT‘Nosalesfound’
ELSE
PRINT‘Yeartodatesales:
’+STR(@ytd)
GO
D.DECLARE@retvalint
DECLARE@ytdint
EXEC@retval=get_sales_for_title‘NetEtiquette’,@ytdOUTPUT
IF@retval<0
PRINT‘Nosalesfound’
ELSE
PRINT‘Yeartodatesales:
’+STR(@ytd)
GO
简答题:
(共40分)
1、(5分)使用一条SQL语句找到重复的值及重复的次数:
有一数据表ZD_ks,其中有字段BM,MC等,请查询出在ZD_ks中BM有重复的值及重复的次数,没有的不要列出。
如下表:
BM DUPCOUNT
001 3
002 2
2、描述(5分)
表1student学生信息表
IDint学生编号
Namevarchar学生姓名
Sexbit性别(男0女1)
Classint班级编号
表2schedule课程信息表
IDint课程编号
Namevarchar课程名称
表3Grade成绩信息表
IDint自动编号
UIDint学生编号
SIDint课程编号
Numint考试成绩
(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、D2、B3、A
4、⑴B,⑵A,⑶B,⑷A
5、B6、A7、B
8、A9、D
简答题
1、
createtableZD_ks(BMvarchar(10),mcvarchar(10),ageint)
insertintoZD_ks(bm,mc,age)values('001','张三',1)
insertintoZD_ks(bm,mc,age)values('001','李四',2)
insertintoZD_ks(bm,mc,age)values('001','王五',3)
insertintoZD_ks(bm,mc,age)values('002','赵六',1)
insertintoZD_ks(bm,mc,age)values('002','钱七',2)
insertintoZD_ks(bm,mc,age)values('003','孙八',1)
go
selectBM,count(*)asDUPCOUNTfromzd_ksgroupbybmhavingcount(*)>1
droptablezd_ks
2、
(1)
selectClass,count
(1)asnumfromstudentgroupbyClass
(2)
selectS.Sex,avg(G.Num)asNum
fromstudentS,GradeG
whereS.ID=G.IDandS.Class=1
groupbyS.Sex
(3)
selectS.Class,count
(1)asnum
fromstudentS,GradeG,scheduleSC
whereS.ID=G.IDandG.SID=Sc.IDandSC.Name='数据结构'andSc.Num<60
groupbyS.Class
3、
1.找出借书超过5本的读者,输出借书卡号及所借图书册数
--实现代码:
SELECTCNO,借图书册数=COUNT(*)
FROMBORROW
GROUPBYCNO
HAVINGCOUNT(*)>5
2.查询借阅了"水浒"一书的读者,输出姓名及班级
--实现代码:
SELECT*FROMCARDc
WHEREEXISTS(
SELECT*FROMBORROWa,BOOKSb
WHEREa.BNO=b.BNO
ANDb.BNAME=N'水浒'
ANDa.CNO=c.CNO)
3.查询过期未还图书,输出借阅者(卡号)、书号及还书日期
--实现代码:
SELECT*FROMBORROW
WHERERDATE
4.查询书名包括"网络"关键词的图书,输出书号、书名、作者
--实现代码:
SELECTBNO,BNAME,AUTHORFROMBOOKS
WHEREBNAMELIKEN'%网络%'
5.查询现有图书中价格最高的图书,输出书名及作者
--实现代码:
SELECTBNO,BNAME,AUTHORFROMBOOKS
WHEREPRICE=(
SELECTMAX(PRICE)FROMBOOKS)
6.查询当前借了"计算方法"但没有借"计算方法习题集"的读者,输出其借书卡号,并按卡号降序排序输出
--实现代码:
SELECTa.CNO
FROMBORROWa,BOOKSb
WHEREa.BNO=b.BNOANDb.BNAME=N'计算方法'
ANDNOTEXISTS(
SELECT*FROMBORROWaa,BOOKSbb
WHEREaa.BNO=bb.BNO
ANDbb.BNAME=N'计算方法习题集'
ANDaa.CNO=a.CNO)
ORDERBYa.CNODESC
7.将"C01"班同学所借图书的还期都延长一周
--实现代码:
UPDATEbSETRDATE=DATEADD(Day,7,b.RDATE)
FROMCARDa,BORROWb
WHEREa.CNO=b.CNO
ANDa.CLASS=N'C01'
8.从BOOKS表中删除当前无人借阅的图书记录
--实现代码:
DELETEAFROMBOOKSa
WHERENOTEXISTS(
SELECT*FROMBORROW
WHEREBNO=a.BNO)
9.在BORROW表上建立一个触发器,完成如下功能:
如果读者借阅的书名是"数据库技术及应用",就将该读者的借阅记录保存在BORROW_SAVE表中(注ORROW_SAVE表结构同BORROW表)
--实现代码:
CREATETRIGGERTR_SAVEONBORROW
FORINSERT,UPDATE
AS
IF@@ROWCOUNT>0
INSERTBORROW_SAVESELECTi.*
FROMINSERTEDi,BOOKSb
WHEREi.BNO=b.BNO
ANDb.BNAME=N'数据库技术及应用'
10.建立一个视图,显示"力01"班学生的借书信息(只要求显示姓名和书名)
--实现代码:
CREATEVIEWV_VIEW
AS
SELECTa.NAME,b.BNAME
FROMBORROWab,CARDa,BOOKSb
WHEREab.CNO=a.CNO
ANDab.BNO=b.BNO
ANDa.CLASS=N'力01'
11.查询当前同时借有"计算方法"和"组合数学"两本书的读者,输出其借书卡号,并按卡号升序排序输出
--实现代码:
SELECTa.CNO
FROMBORROWa,BOOKSb
WHEREa.BNO=b.BNO
ANDb.BNAMEIN(N'计算方法',N'组合数学')
GROUPBYa.CNO
HAVINGCOUNT(*)=2
ORDERBYa.CNODESC