试题Sql Advance 120题带答案.docx
《试题Sql Advance 120题带答案.docx》由会员分享,可在线阅读,更多相关《试题Sql Advance 120题带答案.docx(43页珍藏版)》请在冰豆网上搜索。
试题SqlAdvance120题带答案
《SQLServer数据库管理和高级查询》试题库答案仅作参考
选择题(120题)
1.下列哪个SQL语句属于DDL语句()。
A.Create
B.Select
C.Grant
D.Insert
注释:
DDL(数据定义语句):
DataDefinitionLanguage
2.SQLServer2008的BEGINTRANS和COMMITTRANS,ROOLBACKTRANS语句可用在()中来支持操作的事务特性。
A.Select语句
B.存储过程
C.ADO.NET连接对象的Transaction属性
D.触发器
3.在SQLServer2008数据库中,从Product表中查询出Price(价格)高于Pname(产品名称)为“网通IP电话卡”的所有记录中的最高价格的查询语句是()。
A.SELECT*FROMProductWHEREmax(Price)>’网通IP电话卡’
B.SELECT*FROMProductWHEREPrice>(SELECTmax(*)FROMProductWHEREPname=’网通IP电话卡’)
C.SELECT*FROMProductWHEREEXISTSPname=’网通IP电话卡’
D.SELECT*FROMProductWHEREPrice>(SELECTmax(Price)FROMProductWHEREPname=’网通IP电话卡’)
4.在SQLServer2008中,声明一个最多可以存储10个字符的变量pwd,正确的代码是()。
A.DECLAREpwdVARCHAR(10)
B.DECLARE@pwdVACHAR(10)
C.pwdVARCHAR(10)
D.@pwdVARCHAR(10)
5.在SQLServer2008中,已知Student表中有一个age列,数据类型是int,如果要限制该列的取值范围在18到28之间,可以使用以下哪个SQL语句()。
A.altertableStudentaddcheck(age>=18andage<=28)
B.altertableStudentadddefult(age>=18andage<=28)
C.altertableStudentaddunique(age>=18andage<=28)
D.altertableStudentaddset(age>=18andage<=28)
6.SQLServer2008数据库中,创建books表的语句如下,这个创建命令执行时出错,错误原因有()。
Ceratetablebooks(bookidintprimarykey,titlevarchar(20)notnull,authorcharnotnull,locintidentity(1,1),depidintforeignkey,commenttext(1000))
A.定义主键的方式错误
B.必须对Char数据类型指定列宽度
C.定义外键的方式错误
D.定义外键列不能定义为标识列
E.不能对text数据类型指定列宽度
7.在SQLServer2008中,创建存储过程如下:
要在Students表中查找Age(年龄)是18岁的学生,()可以正确的调用这个存储过程。
CREATEPROCEDUREMyP1@pIntAs
SELECTStudentname,AgeFROMStudentWHEREAge=@p
A.EXECMyp118
B.EXECMyp1@p=18
C.EXECMyp1p=’18’
D.EXECMyp1p=18
8.在SQLServer2008中,假设Orders表中存在自动编号字段oid等于1的记录,执行下面T-SQL,以下说法正确的是()。
BEGINTRANSACTION
DeletefromOrderswhereoid=1
If(@@Error<>0)
ROLLBACKTRANSACTION
Else
COMMITTRANSACTION
A.执行成功,oid为1的记录被永久删除
B.执行成功,Orders表没有任何变化
C.执行时出现错误
D.执行成功,但事务处理并没有任何结束
9.在SQLServer2008中,给定如下的T-SQL代码,以下说法正确的是()。
CreateProcedureprice_proc
(
@countintoutput,@avg_pricemoneyoutput,@typechar(12)=’business’
)
as
Select@Count=Count(*),@avg_price=Avg(price)fromtitleswheretype=@type
A.建立了存储过程price_proc,所有参数都是输出参数
B.建立了存储过程price_proc,返回的是用户指定图书种类数量及平均价格
C.@count=count(*)也可以用@count=count()代替
D.创建存储过程失败,Select语句中使用了聚合函数,因此必须使用GroupBy进行分组
10.在SQLServer安全管理过程中,以下()的概念类似于WinNT中的用户组。
A.权限B.登录账户C.角色D.触发器
11.在sqlserver2008中,与以下T-SQL等效的是()。
Updatetitlessetprice=price*1.05wherepub_idin(selectpub_idfrompublishers)
A.Updatetitlessetprice=price*1.05whereexists(selectpub_idfrompublishers)
B.Updatetitlessetprice=price*1.05fromtitleswherepub_idinpublishers.pub_id
C.Updatetitlessetprice=price*1.05wheretitles.pub_id=publishers.pub_id
D.Updatetitlessetprice=price*1.05fromtitlesinnerjoinpublishersontitles.pub_id=publishers.pub_id
12.Sqlserver2008中,已知执行语句:
Selectcount(score),sun(score)fromscore返回的结果是5和750,那么执行语句:
Selectavg(score)fromscore,返回的结果是()。
A.5
B.150
C.1500
D.750
注释:
count()获得数据的总数量,sun()获取某个字段的总和,avg()获取某个字段的平均值
13.在SqlServer2008数据库中,使用T-SQL编程时,下列()语句可以从WHILE语句块中退出。
A.CONTINUE
B.EXIT
C.BREAK
D.RETURN
14.在SQLServer2008数据库中运行以下T-SQL语句,将输出()。
CREATETABLEMy_Table(aintNULL,bintNULL)
GO
CREATETRIGGERmy_trigONMy_TableFORINSERT
AS
IFUPDATE(b)
PRINT‘更新’
GO
INSERTMy_Tablevalues(3,4)
GO
UPDATEMy_TableSETa=5WHEREb=4
GO
A.更新时间
B.更新
C.不打印任何信息
D.以上代码将出现运行错误而中断
注释:
TRIGGER触发器
15.在SQLServet2008中,执行以下的T-SQL,若能找到title_id为“tc2”的记录,将()。
begintransaciton
ifexists(selecttitle_idfromtitleswheretitle_id=’tc2’)
begin
deletetitleswheretitle_id=’tc2’
rollbacktransaction
print’OK’
end
A.删除该记录行,不打印任何信息
B.不删除该记录行,并且打印OK
C.删除该记录行,并且打印OK
D.不删除该记录行,也不打印任何信息
16.在SQLServer2008中,有Products(产品)表,包含字段Pname(产品名称)、Price(价格)。
若要得到最贵产品的产品名称和产品价格,应该使用的查询语句有()。
A.SELECTTOP1Pname,PriceFROMProductsORDERBYPrice
B.SELECTPname,MAX(Price)FROMProducts
C.SELECTPname,MAX(Price)FROMProductsGROUPBYPname
D.SELECTPname,PriceFROMProductsWHEREPrice=(SELECTMAX(Price)FROMProducts)
17.在SQLServer2008中,分析下面的存储过程,执行后的结果是()。
CREATEProcedurelookup(@aint)
AS
IF@aisnull
Begin
Print‘缺少参数’
RETURN
End
Select*fromsysobjectswhereid=@a
RETURN
Go
EXECUTElookup
A.该存储过程会打印“缺少参数”
B.该存储过程会基于无参数情况做一个查找,返回表中的所有行
C.该存储过程有语法错误
D.数据库服务器会打印一条消息,提示该存储过程需要提供一个参数
18.SqlServer2008中已知有表,表中共有10条status列值为0的记录,创建视图:
CREATEVIEWview1
AS
select*fromstudentwherestatus=0
视图创建成功后,执行如下命令:
Updateview1setstatus=1
Select*fromview1
命令执行的结果是()。
A.错误提示:
不能对视图执行更新操作
B.错误提示:
不能对视图执行查询操作
C.返回10条记录
D.返回0条记录
19.SqlServer2008中,创建触发器的语句如下:
Createtriggertrig_scoreonscoreforinsert
as
declare@sidint,@scorefloat
select@sid=sid,@score=scorefrominserted
updatestudentsetscore=score+@scorewheresid=@sid
Go
其中score表通过sid列与student表建立了外键约束,假定数据库中的数据具备完整性,创建触发器成功后执行语句,insertintoscore(aid,score)values(2,20),执行后的结果是()。
A.score表中插入一条数据,student表中更新一条数据
B.score表中插入一条数据,student表中插入一条数据
C.score表中插入一条数据,student表中没有变化
D.提示错误:
没有inserted这张表
20.为表userinfo添加约束,语法如下:
altertableuserinfoaddconstraintuq_useridunique(userid)
执行成功后,为userinfo表的()字段添加了()约束。
A.Userid;主键
B.Userid;唯一
C.Uq_userid;外键
D.Uq_userid;检查
21.运行如下T-SQL,结果返回包含()的记录集。
createtablescores
(
scoreidintidentity(1,2),
scorenumeric(4,2)notnull,
courseidint
)
insertintoscoresvalues(90.5,null)
insertintoscoresvalues(100,2)
select*fromscores
A.1、90.5、null
3、100、2
B.1、100、2l
C.1、90.50、null
D.1、90.5、null
3、100.0、2
22.关于子查询,以下说法正确的是()。
A.一般来说,联接查询都可以用子查询替换
B.一般来说,子查询都可以用联接查询替换
C.相对于联接查询,子查询适合作为查询的筛选条件
D.相对于联接查询,子查询适合查看多表的数据
23.创建存储过程如下:
CREATEprocedurebookproc
(
@idint,@titlechar(20)OUTPUT
)
AS
select@title=titlefrombookwhereid=@id
执行该存储过程的方法正确的是()。
A.execbookproc1,@titleoutput
print@title
B.execbookproc@id=1,@titleoutput
print@title
C.declare@titlechar(20)
execbookproc1,@titleoutput
print@title
D.declare@titlechar(20)
execbookproc@id=1,@titleoutput
print@title
24.假设需要设计一个表,记录各个作者著作的所有图书信息,表结构设计如下:
作者(作者名称、图书1、版本1、书价1、图书2、版本2、书价2、……),
该表最高符合第()范式。
A.1NFB.2NF
C.3NFD.未规范化的
注释:
1.第一范式(确保每列保持原子性)
2.第二范式(确保表中的每列都和主键相关)
3.第三范式(确保每列都和主键列直接相关,而不是间接相关)
25.一个学生只能就读于一个班级,而一个班级可以同时容纳多个学生,学生与班级之间是()关系。
A.一对一B.一对多
C.多对一D.多对多
26.E-R图中,关系用()来表示。
A.矩形实体型(Entity)B.椭圆形属性(Attribute)
C.菱形关系(Relationship)D.圆形
27.表结构如下,其中#号打头字段代表主键或组合主键,一份订单可以订购多种产品。
产品:
#产品编号,产品名称,产品价格;
订单:
#订单编号,#产品编号,订购日期,订购数量;
该表最高符合第()范式。
A.1NFB.2NF
C.3NFD.未规范化的
28.表结构如下,#号打头字段代表主键或组合主键,一份订单可以订购多种产品:
产品:
#产品编号,产品名称,产品价格;
订单:
#订单编号,总价,支付类型编号,订购日期;
订单子项:
#子项编号,订单编号,产品编号,订购数量;
该表最高符合第()范式。
A.1NFB.2NF
C.3NFD.未规范化的
29.创建表sql语句如下:
createtableuserInfo
(
userIdintidentity(-1,1),第一行
usernamenvarchar(20)notnull,第二行
cardNOcharnotnull,第三行
agesmallint
(2),第四行
addressntext(300)第五行
)
执行时,会在()出现错误。
A.第一行
B.第二行
C.第三行
D.第四行
E.第五行
30.以下关于规范设计的描述正确的是()。
A.规范设计的主要目的是消除数据冗余
B.规范设计往往会增强数据库的性能
C.设计数据库时,规范化程度越高越好
D.在规范化数据库中,易于维护数据完整性
31.关于存储过程,以下说法正确的是()。
A.不能在存储过程中使用CREATEVIEW命令
B.T-SQL批代码的执行速度要快于存储过程
C.存储过程必须带有参数
D.存储过程不能返回结果集
32.下面T-SQL代码运行完的结果是()。
declare@counterint
set@counter=1
while@counter<3
begin
set@counter=@counter+1
print@counter
break
print‘loop’
end
A.2
loop
B.2
C.2
loop
3
loop
D.2
3
33.阅读下面T-SQL语句,对变量赋值时存在错误的是()。
A.DECLARE@idINT,@priceMONEY
set@id=100
set@price=$2.21
B.DECLARE@idINT,@priceMONEY
select@id=100,@price=2.21
C.DECLARE@idINT,@priceMONEY
set@id=100,@price=2.21
D.DECLARE@idINT,@priceMONEY
select@id=100
select@price=$2.21
34.已知有student表,studentid为主键,现在表中共有10行记录,studentid列值从1
到10
创建视图:
CREATEVIEWdbo.VIEW_student
AS
SELECT*FROMdbo.student
接着执行如下命令:
DELETEFROMVIEW_studentWHERE(studentid=8)
然后执行查询命令:
SELECT*FROMstudent
SELECT*FROMVIEW_student
假定上述命令全部执行成功,将各自返回()()行记录。
A.10,10B.10,9
C.9,10D.9,9
35.设计用户表时,身份证号为固定18位,对该字段最好采用()数据类型。
A.intB.char
C.varcharD.text
36.授予用户teacher对Score表的插入和修改的权限,正确的授权语句是()。
A.GRANTINSERT,UPDATETOTABLEScoreONteacher
B.GRANTINSERTANDUPDATETOTABLEScoreONteacher
C.GRANTINSERT,UPDATEONScoreTOteacher
D.GRANTINSERTANDUPDATEONScoreTOteacher
37.建立如下数据库表:
CREATETABLEdepartment
(
DeptIDintNOTNULLprimarykey,
DeptNamevarchar(20)NOTNULL
)
CREATETABLEEmployee
(
EmployeeIDintNOTNULL,
DeptIDintNOTNULL,
Namevarchar(20)NOTNULL
)
要想保证Employee表中每一个雇员(Employee)是唯一的,且只能属于在Department表中已经存在的部门,最佳的做法是()。
A.EmployeeID和DeptID设为组合主键
B.EmployeeID设为主键,同时在DeptID列上创建一个外键约束
C.EmployeeID设为主键,同时在DeptID列上创建一个检查约束
D.在DepartmentID列上创建一个唯一约束,同时在DeptID列上创建一个外键约束
38.建立一张员工表(employee),当向表中插入数据时,若不提供入职时间(beginTime),就把系统当前时间自动作为员工入职时间插入数据库中,以下说法正确的是()。
A.约束中不能使用各种函数,所以只能使用触发器来实现
B.可以使用CHECK约束实现,默认值采用日期函数getDate()
C.入职时间必须设为日期类型
D.可以使用DEFAULT约束实现,默认值采用日期函数getDate()
39.为了加快对某表的访问速度,应对此表建立()。
A.约束
B.存储过程
C.规则
D.索引
40.假设有表student的设计如下:
ID(学号)
Name(姓名)
Address(家庭住址)
Department(所在系)
DepartmentHead(系主任)
该表最高满足第()范式。
A.1NFB.2NF
C.3NFD.不满足任何范式
41.为数据库中一个或多个表的数据提供另一种查看方式的逻辑表被称为()。
A.存储过程B.触发器
C.视图D.表
42.要建立一张教师表,包含姓名、职称、级别等字段。
插入数据时,如果不输入级别字段,缺省值为“讲师”,最合适的实现方法是()。
A.为“级别”字段建立default约束
B.为“级别”字段建立check约束
C.在教师表上建立一个触发器(trigger)
D.为教师表插入数据编写一个存储过程进行控制
43.现有订单表orders,包含数据如下表。
若查询既订购了产品P01,又订购了产品P02的顾客编号,可以执行以下()sql语句。
cid(顾客编号)Pid(产品编号)
C01P01
C01P02
C02P01
C03P02
A.selectdistinct(cid)fromorderso1whereo1.pidin('p01','p02')
B.selectdistinct(cid)fromorderso1whereo1.pid='p01'ando