【网学网提醒】:网学会员为大家收集整理了某国企的sql_server_2000_DBA_考题提供大家参考,希望对大家有所帮助!
一、选择题:
1、在MSSQLServer中,用来显示数据库信息的系统存储过程是()C
Asp_dbhelp
Bsp_db
Csp_help
Dsp_helpdb
2、SQL语言中,删除一个表的命令是()B
ADELETE
BDROP
CCLEAR
DREMORE
3、关系数据库中,主键是(__)A
A、为标识表中唯一的实体
B、创建唯一的索引,允许空值
C、只允许以表中第一字段建立
D、允许有多个主键的
4、在Transact-SQL语法中,SELECT语句的完整语法较复杂,但至少包括的部分(1_B__),使用关键字(2_D__)可以把重复行屏蔽,将多个查询结果返回一个结果集合的运算符是(3_C__),如果在SELECT语句中使用聚合函数时,一定在后面使用(4__C_)。
⑴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表示的意思是D
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
10、Youareadatabasedeveloperforacontainermanufacturingcompany.Thecontainersproducedbyyourcompanyareanumberofdifferentsizesandshapes.ThetablesthatstorethecontainerinformationareshownintheSize,Container,andShapeTablesexhibit:
Size
SizeID
SizeName
Height
Container
ContainerID
ShapeID
SizeID
Shape
ShapeID
ShapeName
Measurements
Asampleofthedatastoredinthetablesisshownbelow:
SizeTable
SizeIDSizeNameHeight
1Small40
2Medium60
3Large80
4Jumbo100
ShapeTable
ShapeIDShapeNameMeasurement
1Triangle10
2Triangle20
3Triangle30
4Square20
5Square30
6Square40
7Circle15
8Circle25
9Circle35
Periodically,thedimensionsofthecontainerschange.Frequently,thedatabaseusersrequirethevolumeofacontainer.Thevolumeofacontaineriscalculatedbasedoninformationintheshapeandsizetables.
YouneedtohidethedetailsofthecalculationsothatthevolumecanbeeasilyaccessedinaSELECTquerywiththerestofthecontainerinformation.Whatshouldyoudo?
A.Createauser-definedfunctionthatrequiresContainerIDasanargumentandreturnsthevolumeofthecontainer.
B.CreateastoredprocedurethatrequiresContainerIDasanargumentandreturnsthevolumeofthecontainer.
C.Addacolumnnamedvolume
tothecontainertable.Createatriggerthatcalculatesandstoresvolumeinthiscolumnwhenanewcontainerisinsertedintothetable.
D.Addacomputedcolumntothecontainertablethatcalculatesthevolumeofthecontainer.
二、填空题
1、备份策略的三种类型是__________备份,_______________备份,___________________备份组成。
2、启动一个显式事务的语句为__________,提交事务的语句为__________,回滚事务的语句为__________
三、简答题
1、现有1销售表(表名为SellDetail),它们结构如下:(4分)
字段名字段类型说明
idint(标识号)
codnochar(7)(商品编码)
codnamevarchar(30)(商品名称)
specvarchar(20)(商品规格)
pricenumeric(10,2)(价格)
sellnumint(销售数量)
deptnochar(3)(售出分店编码)
selldatedatetime(销售时间)
要求:写出查询销售时间段在2002-2-15日到2002-4-29之间,分店编码是01的所有记录。
2、写一个存储过程,要求传入一个表名,返回该表的记录数(假设传入的表在数据库中都存在)
上面考题的部分答案
1D2B3A
4、⑴B,⑵A,⑶B,⑷A
5、B6、A7、B8、A9、D
10、分析
A正确,利用自定义函数可以隐藏计算细节,另外,函数的结果可以作为SELECT查询的列。
B不正确,存储过程不能作为SELECT查询的列。
C不正确,触发器不能创建在SELECT查询的列中。
D不正确,这会造成数据冗余,因为加了一列计算列表就不符合第三范式了。
正确答案:A
填空
1、插入异常,更新异常,删除异常
2、数据定义,数据操纵,数据控制
3、登陆鉴别,对数据库以及角色的许可验证
4、标量函数,内嵌表值型函数,多语句表值函数
5、BEGINTRANSACTION,COMMITTRANSACTION,ROLLBACKTRANSACTION
6、实体,域完整性,参照完整性
简答题:
4、
createProcgetRowCount
@tablenamevarchar(100)
AS
exec('selectcount(*)from'+@tablename)
答案
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
1、SQL语句面试题,关于groupby
表内容:
2005-05-09胜
2005-05-09胜
2005-05-09负
2005-05-09负
2005-05-10胜
2005-05-10负
2005-
05-10负
如果要生成下列结果,该如何写sql语句?
胜负
2005-05-0922
2005-05-1012
------------------------------------------
createtable#tmp(rqvarchar(10),shengfunchar(1))
insertinto#tmpvalues('2005-05-09','胜')
insertinto#tmpvalues('2005-05-09','胜')
insertinto#tmpvalues('2005-05-09','负')
insertinto#tmpvalues('2005-05-09','负')
insertinto#tmpvalues('2005-05-10','胜')
insertinto#tmpvalues('2005-05-10','负')
insertinto#tmpvalues('2005-05-10','负')
1)selectrq,sum(casewhenshengfu='胜'then1else0end)'胜',sum(casewhenshengfu='负'then1else0end)'负'from#tmpgroupbyrq
2)selectN.rq,N.勝,M.負from(
selectrq,勝=count(*)from#tmpwhereshengfu='胜'groupbyrq)Ninnerjoin
(selectrq,負=count(*)from#tmpwhereshengfu='负'groupbyrq)MonN.rq=M.rq
3)selecta.col001,a.a1胜,b.b1负from
(selectcol001,count(col001)a1fromtemp1wherecol002='胜'groupbycol001)a,
(selectcol001,count(col001)b1fromtemp1wherecol002='负'groupbycol001)b
wherea.col001=b.col001
2.请教一个面试中遇到的SQL语句的查询问题
表中有ABC三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列。
------------------------------------------
select(casewhena>bthenaelsebend),
(casewhenb>cthenbeslecend)
fromtable_name
3.面试题:一个日期判断的sql语句?
请取出tb_send表中日期(SendTime字段)为当天的所有记录?(SendTime字段为datetime型,包含日期与时间)
------------------------------------------
select*fromtbwheredatediff(dd,SendTime,getdate())=0
4.有一张表,里面有3个字段:语文,数学,英语。其中有3条记录分别表示语文70分,数学80分,英语58分,请用一条sql语句查询出这三条记录并按以下条件显示出来(并写出您的思路):
大于或等于80表示优秀,大于或等于60表示及格,小于60分表示不及格。
显示格式:
语文数学英语
及格优秀不及格
------------------------------------------
select
(casewhen语文>=80then'优秀'
when语文>=60then'及格'
else'不及格')as语文,
(casewhen数学>=80then'优秀'
when数学>=60then'及格'
else'不及格')as数学,
(casewhen英语>=80then'优秀'
when英语>=60then'及格'
else'不及格')as英语,
fromtable
5.在sqlserver2000中请用sql创建一张用户临时表和系统临时表,里面包含两个字段ID和IDValues,类型都是int型,并解释下两者的区别?
------------------------------------------
用户临时表:createtable#xx(IDint,IDValuesint)
系统临时表:createtable##xx(IDint,IDValuesint)
区别:
用户临时表只对创建这个表的用户的Session可见,对其他进程是不可见的.
当创建它的进程消失时这个临时表就自动删除.
全局临时表对整个SQL
Server实例都可见,但是所有访问它的Session都消失的时候,它也自动删除.
6.sqlserver2000是一种大型数据库,他的存储容量只受存储介质的限制,请问它是通过什么方式实现这种无限容量机制的。
------------------------------------------
它的所有数据都存储在数据文件中(*.dbf),所以只要文件够大,SQLServer的存储容量是可以扩大的.
SQLServer2000数据库有三种类型的文件:
主要数据文件
主要数据文件是数据库的起点,指向数据库中文件的其它部分。每个数据库都有一个主要数据文件。主要数据文件的推荐文件扩展名是.mdf。
次要数据文件
次要数据文件包含除主要数据文件外的所有数据文件。有些数据库可能没有次要数据文件,而有些数据库则有多个次要数据文件。次要数据文件的推荐文件扩展名是.ndf。
日志文件
日志文件包含恢复数据库所需的所有日志信息。每个数据库必须至少有一个日志文件,但可以不止一个。日志文件的推荐文件扩展名是.ldf。
7.请用一个sql语句得出结果
从table1,table2中取出如table3所列格式数据,注意提供的数据及结果不准确,只是作为一个格式向大家请教。
如使用存储过程也可以。
table1
月份mon部门dep业绩yj
-------------------------------
一月份0110
一月份0210
一月份035
二月份028
二月份049
三月份038
table2
部门dep部门名称dname
--------------------------------
01国内业务一部
02国内业务二部
03国内业务三部
04国际业务部
table3(result)
部门dep一月份二月份三月份
--------------------------------------
0110nullnull
02108null
03null58
04nullnull9
------------------------------------------
1)
selecta.部门名称dname,b.业绩yjas'一月份',c.业绩yjas'二月份',d.业绩yjas'三月份'
fromtable1a,table2b,table2c,table2d
wherea.部门dep=b.部门depandb.月份mon='一月份'and
a.部门dep=c.部门depandc.月份mon='二月份'and
a.部门dep=d.部门depandd.月份mon='三月份'and
2)
selecta.dep,
sum(casewhenb.mon=1thenb.yjelse0end)as'一月份',
sum(casewhenb.mon=2thenb.yjelse0end)as'二月份',
sum(casewhenb.mon=3thenb.yjelse0end)as'三月份',
sum(casewhenb.mon=4thenb.yjelse0end)as'四月份',
sum(casewhenb.mon=5thenb.yjelse0end)as'五月份',
sum(casewhenb.mon=6thenb.yjelse0end)as'六月份',
sum(casewhenb.mon=7thenb.yjelse0end)as'七月份',
sum(casewhenb.mon=8thenb.yjelse0end)as'八月份',
sum(casewhenb.mon=9thenb.yjelse0end)as'九月份',
sum(casewhenb.mon=10thenb.yjelse0end)as'十月份',
sum(casewhenb.mon=11thenb.yjelse0end)as'十一月份',
sum(casewhenb.mon=12thenb.yjelse0end)as'十二月份',
fromtable2aleftjointable1bona.dep=b.dep
8.华为一道面试题
一个表中的Id有多个记录,把所有这个id的记录查出来,并显示共有多少条记录数。
------------------------------------------
selectid,Count(*)fromtbgroupbyidhavingcount(*)>1
select*from(selectcount(ID)ascountfromtablegroupbyID)TwhereT.count>1