1思考题公司中有多个部门和多名职员,每个职员只能属于一个部门,一个部门可以有多名职员,从部门到职员的联系类型是()A.多对多B.一对一C.多对一D.一对多一对多2思考题下列聚合函数中哪一个是计算列的平均值()SUM()MAX()AVG()COUNT()AVG()3思考题Whereage=‘20’andage=‘50’相当于()A.Whereage=’20’orage=‘50’B.Whereage=’2002-02-01’andage=‘50’C.Whereagebetween’20’and‘50’D.Whereagebetween‘20’or‘50’Whereagebetween’20’and‘50’4思考题现有如下关系:患者(患者编号,患者姓名,性别,出生日期,所在单位)医生(医生编号,医生姓名,所在科室)医疗(患者编号,医生编号,诊断日期,诊断结果)则,医疗关系中的外键有()A.患者编号B.医生编号C.患者编号和医生编号D.没有患者编号和医生编号5思考题为数据表创建索引的目的是()A.创建主键B.创建唯一索引C.提高查询的检索性能D.归类提高查询的检索性能6思考题设有一张数据表“DEPT”,包含两个字段DNO和DNAME,如果要找出倒数第三个字母为W,并且至少包含4个字母的DNAME,则查询条件子句应写成WHEREDNAMELIKE()A.‘__W_%’B.‘_%W__’C.‘_W__’D.‘_W_%’‘_%W__’7思考题SQL语言中,删除一个表的命令是()A.DELETETABLEB.DROPTABLEC.CLEARTABLED.REMORETABLEDROPTABLE8思考题如果要求学生关系S(SNO,NAME,SEX,AGE)中存储的学生信息满足下列条件:男生(SEX=‘F’)的年龄在15-60岁之间,女生(SEX=‘M’)的年龄在15-55岁之间。那么在关系S的定义中加入的检查子句正确的是()A.CHECK(AGE=15AND((SEX=‘M’ANDAGE=60)AND(SEX=‘F’ANDAGE=55)))B.CHECK(AGE=15AND((SEX=‘M’ANDAGE=60)OR(SEX=‘F’ANDAGE=55)))C.CHECK(AGE=15OR((SEX=‘M’ANDAGE=60)OR(SEX=‘F’ANDAGE=55)))D.CHECK(AGE=15OR((SEX=‘M’ANDAGE=60)AND(SEX=‘F’ANDAGE=55)))B.CHECK(AGE=15AND((SEX=‘M’ANDAGE=60)OR(SEX=‘F’ANDAGE=55)))9思考题索引字段值不唯一,应该选择的索引类型为()。A、主索引B、普通索引C、候选索引D、唯一索引普通索引10思考题在哪种索引中,表中各行的物理顺序与键值的逻辑(索引)顺序相同()?A、聚簇索引B、非聚簇索引C、两者都是D、两者都不是聚簇索引11思考题为了实现安全性,每个网络用户在访问SQLserver数据库之前,都必须经过验证包括:()身份验证和权限验证身份验证权限验证不需要验证身份验证和权限验证12思考题UPDATE语句可能涉及到触发器中的临时表为:()A.DELETED表B.INSERTED表C.INSERTED表与DELETED表D.UPDATED表C.INSERTED表与DELETED表13思考题SQLserver数据库文件有三类,其中主数据文件的后缀为:()A、.ndfB、.ldfC、.mdfD、.idfC、.mdf14思考题下面标志符不合法的是:()A、[mydelete]B、_mybaseC、$moneyD、trigger1C、$money15思考题下面对索引的相关描述正确的是:()A、经常被查询的列不适合建索引。B、只有少数几个值的列适合建索引。C、有重复值的列适合建索引。D、是外键或主键的列不适合建索引。C、16思考题下列说法中正确的是:()A、SQLserver中局部变量可以不声明就使用B、SQLserver中全局变量必须先声明再使用C、SQLserver中所有变量都必须先声明后使用D、SQLserver中只有局部变量先声明后使用;全局变量是由系统提供的,用户不能自己建立。D、17思考题下面字符串能与通配符表达式ABC%a进行匹配的是:()A、BCDEFB、A_BCDC、ABC_aD、A%aC、18思考题下列语句中正确的是()。表score(sti_id,names,math,English,VB)A.selectstu_id,sum(math)fromscoreB.selectsum(math),avg(VB)fromscoreC.select*,sum(English)fromscoreD.delete*fromscoreB、(DELE语句不使用*号)19思考题下列说法正确的是()。A、视图是观察数据的一种方法,只能基于基本表建立。B、视图是虚表,观察到的数据是实际基本表中的数据。C、视图中存放着观察到的数据。D、视图中并不存放实际数据,所以视图没什么用。B、20思考题下面是合法的smallint数据类型数据的是:()A、223.5B、32768C、-32767D、58345C、21思考题createtablel1(numdecimal(7,3))goinsertintol1values(9999.9994)执行上面命令后,表中的数据是:()A、出现插入错误B、9999.999C、10000.00D、0.0B、22思考题下列哪个不属于数据库对象:()A、存储过程B、角色C、视图D、日志D、23思考题下列描述中,哪个不是游标支持的功能:()A、建立数据库。B、在结果集中定位特定行。C、从结果集的当前位置检索行。D、支持对结果集中当前位置的行进行数据修改。A、24上机实验课本P1607.9实验2),填空:USESALESGOCREATEFUNCTIONFF(@NASINT)RETURNSINTBEGINDECLARE@SINT,@KINTSET/*填空*/SET/*填空*/while/*填空*/beginSET@S=/*填空*/SET/*填空*/endRETURN/*填空*/ENDGO执行时:USESALESGOSELECTDBO.FF(5)显示:12025课本P1607.9实验2)USESALESGOCREATEFUNCTIONFF(@NASINT)RETURNSINTBEGINDECLARE@SINT,@KINTSET@S=1SET@K=1while@K=@NbeginSET@S=@S*@KSET@K=@K+1endRETURN@SENDGO执行时:USESALESGOSELECTDBO.FF(5)显示:12026上机实验把SALES数据库附加进自己的系统。按要求建立如下的存储过程(1)单表操作:存储过程名:myp带入参数:长度为3的字符串输出:Orders表里CustomerID为该字符串的所有订单信息。见下页的运行效果:2728实验提示(待填空)建立存储过程myp:CREATEPROCEDUREmyp@xchar(3)ASSELECT*FROMOrdersWHERE(/*填空*/)GO29解答建立存储过程myp:CREATEPROCEDUREmyp@xchar(3)ASSELECT*FROMOrdersWHERE(customerid=@x)GO30(2)多表连接:Orders、Salers、Customers存储过程名:myp2带入参数:一个整数输出:Orders表里订单编号为该整数的客户名称、销售员和订单日期。见下页的运行效果:3132建立存储过程myp2:CREATEPROCEDUREmyp2@yintASSELECTOrders.OrderID,Customers.CompanyName,Salers.Salename,Orders.OrderDateFROMOrdersINNERJOINSalersON/*填空*/INNERJOINCustomersON/*填空*/WHERE(/*填空*/)实验提示(待填空)33建立存储过程myp2:CREATEPROCEDUREmyp2@yintASSELECTOrders.OrderID,Customers.CompanyName,Salers.Salename,Orders.OrderDateFROMOrdersINNERJOINSalersONOrders.SaleID=Salers.SaleIDINNERJOINCustomersONOrders.CustomerID=Customers.CustomerIDWHERE(Orders.Orderid=@y)34上机实验:创建及使用触发器1、把SALES数据库附加进自己的系统。2、按要求建立如下的触发器触发器名称:mytrigger功能:当修改OrderDetails表中的quantity列的内容时,相应更改Products表中的库存数量(stocks列):把变动的数据在库存中反应出来,例如订单上的数量增加了100,则库存数量相应减少100。依此类推。实例:当SALES数据库附加进来时,OrderDetails中数据如下:35注意第一行的P01003(绿茶)的数量为50:36初始时SALES数据库里的Products表的内容如下,注意其中绿茶的数量为170:37创建了mytrigger之后,修改OrderDetails表中的第一行:把数量从50改为100:再次打开Products表,发现绿茶的库存已从原来的170变为120:38删除该触发器,再次修改OrderDetails表中的数量,看看Products表的数据还有没有相应改变?思考:怎么完善触发器,使之能避免造成库存为负数?提示:先增加products表的CHECK约束,不允许stocks数量为负数:39然后确认相应的触发器为前触发器。当把OrderDetails表中的第一行(绿茶)的数量改为400时,由于超出了products表中绿茶的库存量,于是出现下面提示。关闭窗口,发现本次修改不成功。40实验解答默认的触发器类型:USEsalesgoCREATETRIGGERmytriggerON/*填空*/for/*填空*/ASBEGINdeclare@pidchar(6),@new_quantityint,@old_quantityintselect@pid=productid,@new_quantity=quantityfrominsertedselect@old_quantity=quantityfrom/*填空*/update/*填空*/set/*填空*/where/*填空*/END41实验解答默认的触发器类型:USEsalesgoCREATETRIGGERmytriggerONOrderDetailsforUPDATEASBEGINdeclare@pidchar(6),@new_quantityint,@old_quantityintselect@pid=productid,@new_quantity=quantityfrominsertedselect@old_quantity=quantityfromdeletedupdateproductssetstocks=stocks+@old_quantity-@new_quantitywhereProductID=@pidEND42实验解答前触发器:USEsalesgoCREATETRIGGERmytriggerON/*填空*/INSTEADOFUPDATEASBEGINdeclare@pidchar(6),@new_quantityint,@old_quantityintselect@pid=productid,@new_quantity=quantityfrominsertedselect@old_quantity=quantityfrom/*填空*/upd