还剩16页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
第3章习题答案
一、填空题在SQL语言的结构中,二基本表有对应的物理存储而一视图没有对应的物理存储SQL语言中,向数据库表中插入数据的命令是INSERT.SQL语言中,对用户授权使用GRANT语句,而取消所授的权限使用REVOKE语句SQL的中文全称是SlrucluredOueryLanguageSQL除了具有数据查询和数据操纵功能外,还具有数据定义和数据控制功能在SOL语言中,实现数据检索的语句是SELECT关系RABC和SADEF有相同的属性A关系代数表达式FIr.b.d.fRS可用SQL的查询语句表达为SELECTR.ABDFFROMRSWHERER.A=S.A视图是从基本表一中导出的表数据库中实际存放的是视图的国区_设有关系表RBHXMXB.DWH、SDWHDWM、TBHXMXBDWH贝IJ1实现RUT的SQL语句是SelectBHXMXBR.DWHDWMFromRSWhereR.DWH=S.DWH;2实现dwh=ooR的SQL语句是Select*FromRWhereDWH=100;3实现CIxm.xbR的SQL语句是SelectXMXBFromRFROM教师WHERENOTEXISTS(SELECT*FROM教师1授课WHERE教师
1.教师号=授课.教师号AND教师
1.姓名=’李军ANDNOTEXISTS(SELECT*FROM授课1WHERE教师.教师号二授课
1.教师号AND授课
1.课号二授课.课号));Select课程.课程名,教师.教师名,Count(授课.选课人数)From授课,教师,课程Groupby教师号HavingMax(选课人数)AND授课.教师号二教师.教师号AND授课.课程号二课程.课程号;Select教师.教师名,Couni(授课.课程号)*课程.学时From授课,教师,课程Groupby教师号Having授课.教师号=教师.教师号AND授课.课程号=课程.课程号;
2.写出下列查询的SQL语句现有关系数据库学生(学号,姓名,性别,出生日期,奖学金)、课程(课程号,课程名称,学分,开课系,开课学期)、选课(学号,课程号,成绩),内容如下表选课:学生(奖学金为字符型字段)课程写出下列查询的SQL语句(字段名用表中所给的名称)
(1)查询所有得过奖学金的女学生的学号、姓名
(2)查询计算机系第二学期所开课程的课程名称和学分
(3)查询每位学生所选课程的门数和总平均成绩
(4)查询缺成绩的学生的姓名、缺成绩的课程名称及学分数
(5)杳询选修计算机系所开设的所有课程的学生姓名
(6)创建一个社科学院所开设课程的视图,包含课程号、课程名、学分解
(1)查询所有得过奖学金的女学生的学号、姓名Select学号From学生Where性别:女and奖学金=是‘
(2)查询计算机系第二学期所开课程的课程名称和学分Select课程名称,学分From课程Where开课系=计算机系and开课学期:第二学期
(3)查询每位学生所选课程的门数和总平均成绩SelectCOUNT(课程号)AVG(成绩)From选课GroupBy学号
(4)查询缺成绩的学生的姓名、缺成绩的课程名称及学分数Select姓名,课程名称,学分From学生课程,选课Where学生.学号二课程.学号and课程.课程号=选课.课程号and成绩ISNULL
(5)查询选修计算机系所开设的所有课程的学生姓名SELECT姓名FROM学生WHERENOTEXISTS(SELECT*FROM课程WHERE开课系=’计算机系ANDNOTEXISTS(SELECT*FROM选课WHERE学号二学生.学号AND课程号二课程.课程号))
(6)创建一个社科学院所开设课程的视图,包含课程号、课程名、学分CREATEVIEWIS_课程ASSELECT课程号,课程名,学分FROM课程WHERE开课系二,社科学院*
3.设图书借阅数据库有关系图书(图书编号,书名,作者,出版社,出版时间,图书类别)、读者(读者编号,姓名,读者类别)和借阅(读者编号,图书编号,借阅H期,还期)其中,读者类别为字符型,可以取值‘学生和教师,图书类别为字符型,取值为‘经济类、管理类、‘外语类、’计算机类等试用SQL语句完成下列查询对图书借阅数据库完成以下操作
(1)查询借阅了作者为“张强”的图书的读者编号和图书编号
(2)创建一个视图vl该视图用来查询教师的借阅情况,要求包含教师姓名、书名、借阅日期、还期
(3)查询所借的书名中包含“程序设计”这四个字的读者的读者编号和借阅日期
(4)根据图书类别统计各类图书的借书数量并按数量由大到小排序
(5)删除出版社是“电子出版社”的借书记录
(6)查询借阅了“电子出版社”和“机械出版社”出版的图书的读者编号解
(1)Select读者编号,图书编号From借阅,图书Where借阅.图书编号=图书.图书编号AND图书.作者=张强’;
(2)CREATEVIEWVIASSELECT教师姓名,书名,借阅日期,还期FROM图书,读者,借阅WHERE借阅.图书编号:图书.图书编号AND读者.读者类别=‘教师’;
(3)Select读者编号借阅日期From借阅,图书Where借阅.图书编号二图书.图书编号AND图书.书名like,%程序设计%;Select图书类别SUM(借阅.图书编号)From借阅,图书Groupby图书类别Having借阅.图书编号二图书.图书编号Orderby DELETEFROM借阅WHERE,图书编号,=(SELETE图书编号FROM图书WHERE图书.出版社:电子出版社;Select读者编号From借阅,图书Where借阅.图书编号:图书.图书编号AND图书.出版社:电子出版社OR图书.出版社二机械工业出版社’;
4.阅读下列说明,回答问题1至问题5某工厂的信息管理数据库的部分关系模式如下所示职工(职工号,姓名,年龄,月工资,部门号,电话,办公室)部门(部门号,部门名,负责人代码,任职时间)关系模式的主要属性、含义及约束如表1所示,“职工”和“部门”的关系示例分别如表2和表3所示表1主要属性、含义及约束属性含义及约束唯一标识每个职工的编号,每个职工属于并且仅属于一个部门部门号唯一标识每个部门的编号,每个部门有一个负责人,且他也是一个职工月工资500W月工版5000于表2“职工”关系表3“部门”关系【问题1】根据上述说明,由SQL定义的“职工”和“部门”的关系模式,以及统计各部门的人数C、工资总数Totals、平均工资Averages的D_S视图如下所示,请在空缺处填入正确的内容CreateTable部门部门号CHARlPRIMARYKEY部门名CHAR16负责人代码CHAR4任职时间DATEFOREIGNKEY负责人代码REFERENCES职T.职工号;CreateTable职工职工号CHAR4姓名CHAR8年龄NUMBER3月工资NUMBER4部门号CHARl电话CHAR8办公室CHAR8FOREIGNKEY负贵人代码REFERENCES职工职工号FOR日GNKEY部口号REFERENCES部门,CHECK月工资>=500AND月工资〈=5000;CreateViewD_SDCTotalsAveragesAsSelect部门号,count*AVG月工资,SUM月工资from职工Groupby部门号【问题2]对于表
2、表3所示的“职工”和“部门”关系,请指出下列各行是否可以插入为什么?1001王新军28100018001234主楼201答该行不能插入“职工”关系,它违反了实体完整性中主码必须唯一区分关系中的每一个属性2003李力281000答该行可以插入“职工”关系,尽管部门号、电话和办公室为空,但是它表示该雇员没有分配到某个部门5802赵晓啸361500680015683号楼503答该行不能插入“职工”关系,它违反了参照完整性因为6在关系“部门’中不存在【问题3】在问题1定义的视图D_S上,下面那个查询或更新是允许执行的,为什么?lUpdateD_Sset=3whereD=4;2DeletefromD_Swhere04;3SelectDAveragesfromD_SwhereCSelectCfromDSwhereD=dept;4SelectDCFromDSwhereTotals10000;5Select*fromD_S;答1和2都不能更新,因为使用分组合聚集函数定义的视图是不可更新的3不一定,视子查询的返回值而定,4和5允许查询【问题4】查询每个部门中月工资最高的“职工号”的SQ1查询语句如下Select职工号from职工Ewhere月工资=SelectMax月工资from职工asMwhereM.部门号=E.部门号1请用30字以内文字简要说明该查询语句对查询效率的影响答对于外层的职工关系E中的每一个元组,都要对内层的整个职工关系M进行检索因此查询效率不高2对该查询语句进行修改,使它既可以完成相同功能,又可以提高查询效率2解答一改正后的SQL语句使用了临时表SelectMax月工资as最高工资,部门号intoTempfrom职工Groupby部门号Select职工号from职工Tempwhere月工资:最高工资and职工.部门号二Temp.部门号解答二Select职工号from职工,SeleclMax月工资as最高工资,部门号Groupby部门号asdepMaxwhere月工资二最高工资and职工.部门号二depMax.部门号【问题5】假定分别在“职工”关系中的“年龄”和‘月工资字段上创建了索引,如下的Select杳询语句可能不会促使查询优化器使用索引,从而降低查询效率,请写出既可以完成相同功能又可以提高查询效率的SQL语句Select姓名,年龄,月工资from职工where年龄>45or月工资<100;答Selecl姓名,年龄,月工资from职工where年龄>45;unionSelect姓名,年龄,月工资from职工where年龄月工资<1000;4实现ITxmdwhoxb=,女,R的SQL语句是:SelectXMDWHFromRWhcrcXB=女;5实现RxS的SQL语句是Select*FromRSWhereR.DWH=S.DWH;6实现nxMXB.DWHOXB5RxS的SQL语句是SelectXMXBDWHFromR.SWhereR.DWH=S.DWHandXB=男;
10.设有学生关系SNoNameSexAgeClass其中No是学号,Name是姓名,Sex是性别,Age是年龄,Class是班级,N和Age为整型,其余为字符型,则I实现插入记录25李明〈男21,9503「的SQL语句是INSERTINTOSNoNameNameAgeClassVALUES25李明‘,男,2195031;2插入,95031,班学号为
30、姓名为‘郑和的学生记录,要用的SQL语句是INSERTINTOSNoNameClassVALUES30郑和,950313实现将学号为10的学生姓名改为,王华,、性别改为‘女,的SQL语句是UPDATES5£丁回联二王华,Sex,女,WHEREno=10;4实现将班级95101,改为,95091,的SQL语句是UPDATESSETClass=z9509HWHEREClass=,9510V;5实现删除学号为20的学生记录的SQL语句是DELETEFROMSWHEREno=20;6实现删除所有姓,王,的学生记录的SQL语句是DELETEFROMSWHEREName=like王%;
二、单项选择题.SQL语言是3oA.过程化语言B.宿主语言C.汇编语言D.非过程化语言.在视图上不能完成的操作是」A.更新视图B.查询C.在视图上定义基本表D.在视图上定义新的视图.SQL语言集数据查询、数据操纵、数据定义和数据控制功能于•体,其中CREATE.DROP、ALTER语句实现C功能A.数据查询B.数据操纵C.数据定义D.数据控制.在SQL语言中,删除一个视图的命令是AA.DELETEB.DROPC.CLEARD.REMOVE.在SQL语言中,视图对应于数据库的△oA.外模式B.模式C.内模式D.存储模式.在下列SQL语句中,D不是数据定义语句A.CREATETABLEB.DROPVIEWC.CREATEVIEWD.GRANT.若要除去数据库中已经存在的表S可用A°A.DELETETABLESB.DELETESC.DROPTABLESD.DROPS.若要在基本表S中增加一列CN可用oADDTABLESCNCHAR8ADDTABLESALTERCNCHAR8ALTERTABLESADDCNCHAR8ALTERTABLESADDCNCHAR
8.若要删除关系模式SSnoSnameSsexSage的Sage属性,可用B°A.DELETESageFROMSB.ALTERTABLESDROPSageC.UPDATESSageD.ALTERTABLESSage
5.设有学生关系SSnoSnameSage课程关系CCnoCname选修关系SCSnoCnoGrade其中Sno是学号,Sname是学生姓名,Sage是学生年龄,Cno是课程号,Cname是课程名,Grade是成绩要查询选修了“ACCESS”课程的年龄不小于20的全体学生姓名,可用SELECTSNAMEFROMSCSCWHEREA语句实现S.Sno=SC.SnoandC.Cno=SC.CnoandSage=20andCname=ACCESSS.Sno=SC.SnoandC.Cno=SC.CnoandSagein=20andCnameinACCESSSagein=20andCnameinACCESS4Sagein=20andCname=ACCESS.设关系数据库中表S的结构是SSNCNGRADE其中SN为学生姓名,CN为课程名,二者均为字符型;GRADE为成绩,数值型,取值范围〜100若要把“张二的化学成绩为80分”插入S中,则可用DADDINTOSVALUES张二化学80INSERTINTOSVALUES张二化学80ADDINTOSVALUES张二化学80INSERTINTOSVALUES张二化学,
80.设关系数据库中表S的结构是SSNCNGRADE其中SN为学生姓名,CN为课程名,二者均为字符型GRADE为成绩,数值型,取值范围〜100若要将张二的化学成绩改为85分,则可用AUPDATESSETGRADE=85WHERESN=张二andCN=化学’UPDATESSETGRADE=85WHERESN=张二andCN=化学’UPDATEGRADE=85WHERESN=,张二,andCN二,化学’UPDATEGRADE=85WHERESN=张二andCN=‘化学’.在SQL语言中,子查询是一DA.返回单表中数据子集的查询语句B.返回多表中字段子集的查询语句C.选取单表中字段子集的查询语句D.嵌入到另一个查询语句之中的查询语句.设有学生关系SSnoSnameSsex课程关系CCnoCname选修关系SCSnoCnoGrade其中Sno是学号,Sname是学生姓名,Ssex是学生性别,Cno是课程号,Cname是课程名,Grade是成绩要查询选修了“数据库”课程的全体男生姓名,可用SELECTSNAMEFROMSCSCWHEREA语句实现S.Sno=SC.SnoandC.Cno=SC.CnoandSsex=男andCname=数据库S.Sno=SC.SnoandC.Cno=SC.CnoandSscxin男andCnamein数据库’Ssex男andCname数据库’Ssex=男andCname=数据库,.若用如下的SQL语句创建一个表SC:CREATETABLESCSnoCHAR6NOTNULLCnoCHAR3NOTNULLGradeINTNOTECHAR20则INSERTINTOSCVALUESB可以成功执行A.20100911160必修B.200823;*101;NULLNULLC.NULLJ10380‘选修D.201132;NULL86H.设有学生关系SSnoSnameSsex课程关系CCnoCname选修关系SCSnoCnoA.UNIQUEB.COUNTC.DISTINCTD.UNION.在SQL语言中,下列涉及空值的操作,不正确的是其中AGE是一个属性名A.AGEISNULLB.AGEISNOTNULLC.AGE=NULLD.NOTAGEISNULL.设有一个关系DEPTDNODNAME如果要找出倒数第三个字母为W并且至少包含4个字母的DNAME则查询条件子句应写成WHEREDNAMELIKEIA.―W_%B._W_%C.D._%W―.当SELECT语句涉及多张表时,其WHERE子句需要给出DA.仅选择条件B.仅连接条件C.连接条件或选择条件D.连接条件和选择条件.在SQL中,与NOTIN等价的操作符是一D.A.=ANYB.oANYC.=ALLD.ALL.在SQL中,SALARYIN
1000.20X的含义是一D0SALARY=2000ANDSALARY=1000SALARY2000ANDSALARY1000SALARY=2000ANDSALARY=1000SALARY=2000ORSALARY=
1000.某SQL语句要杳找所有姓张的职工,下列涉及条件判断的操作,正确的是一AA.where姓名like“张%”B.where姓名=“张%”C.where姓名like”张*D.where姓名like“张”.SQL语句中,下列涉及空值的操作,不正确的是一CA.SCOREISNULLB.SCOREISNOTNULLC.SCORE=NULLD.NOTSCOREISNULL
27.查询选修了课程号为“C2”的学生中成绩最高的学生的学号,正确的SELECT语句是C.SELECTSnoFROMSCWHERECno=C2ANDGRADE=ALLSELECTGRADEFROMSCWHERECno=C2SELECTSnoFROMSCWHEREGRADEINSELECTMAXGRADEFROMSCWHERECno=C2SELECTSnoFROMSCWHERECno=C2ANDGRADE二SELECTMAXGRADEFROMSCWHERECno=C2SELECTSnoFROMSCWHERECno=C2ANDGRADE=ANYSELECTGRADEFROMSCWHERECno=C2
三、简述题.简述SELECT语句中的表别名的用法及作用.在什么情况下一个子查询可以参与表达式运算,试举一个例子.什么是基本表?什么是视图?两者的区别和联系是什么?答:基本表是本身独立存在的表在SQL中一个关系就对应一个表视图是从一个或几个基本表导出的表视图本身不独立存储在数据库中,是一个虚表即数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中视图在概念上与基本表等同,用户可以如同基本表那样使用视图可以在视图上再定义视图.所有的视图是否都可以更新?为什么?答不是视图是不实际存储数据的虚表,因此对视图的更新,最终要转换为对基本表的更新因为有些视图的更新不能惟一有意义地转换成对相应基本表的更新所以,并不是所有的视图都是可更新的例如视图S_G学生的学号及他的平均成绩CREATEVIEWS_GSnoGavgASSELECTSnoAVGGrade/*设SC表中“成绩列Grade为数字型*/FROMSCGROUPBYSno;要修改平均成绩必须修改各科成绩,而我们无法知道哪些课程成绩的变化导致了平均成绩的变化.在供应商、零件数据库中有以下3个关系模式供应商SSNOSNAMECITYSTATUS零件PPNOPNAMEWEIGHTCOLORCITY供应货SPSNOPNOQTY各属性的含义可由属性名体现,不再重复,供应货关系SP表示某供应商SNO供应了PNO零件,数量为QTY用SQL语言完成以下操作1求供应红色零件的供应商名字;2求北京供应商的号码、名字和状况STATUS;
(3)求零件P2的总供应量;
(4)把零件P2的重量增加
(5)颜色该为黄色
(1)求供应红色零件的供应商名字;SelectSNAMEFromSPSPWhereS.SNO=SP.SNOandP.PNO=SP.PNOandP.COLORd红;
(2)求北京供应商的号码、名字和状况(STATUS);SelectSNOSNAMESTATUSFromSWhereCITY=北京,;
(3)求零件P2的总供应量;Selectsum(QTY)FromSPWherePNO=P2
(4)把零件P2的重量增加UpdataPSetWEIGHT=WEIGHT+2WherePNO=P2
(5)颜色该为黄色UpdataPSetColor=,黄’WherePNO=P
26.关系模式如下商品P(PNOPNAMECOLORPRICE)商店S(SNOSNAMECITY)销售SP(PNOSNOQTY)
(1)用SQL语句实现如下查询查询出售商品“TV”的商店名SNAME;
(2)将上述SQL语句转化为等价的关系代数表达式;1SELECTSNAMEFROMSSPPWHERES.SNO=SP.SNOANDP.PNO=SP.PNOANDP.PNAME=TV”
(2)乃SNAA/E(bp=17V,(SVSPP))
四、综合题
1.设某系的教师_授课数据库有三个基本表教师(教师号,姓名,性别,职称,教研室);课程(课程号,课程名称,学时);授课(教师号,课程号,选课人数)其中1)教师表的主码为教师号2)课程表的主码为课程号3)授课表的主码为教师号和课程号,教师号是外码,课程号也是外码用SQL语句完成如下操作
(1)定义授课表,并同时定义主码和外码
(2)查找“基础会计”教研室的教师所讲授的课程名称
(3)查找讲授了“李军”所讲的所有课程的教师姓名
(4)查找选修学生最多的课程名称、教师姓名及选课人数
(5)统计每位教师的教学工作量(即所讲授课程的课时总数)答⑴CREATETABLE授课(教师号CHAR
(8)课程号CHAR
(10)选课人数SMALLINT);PRIMARYKEY(教师号,课程号),/*主码由两个属性构成,必须作为表级完整性进行定义*/FOREIGNKEY(课程号)REFERENCES课程(课程号),/*表级完整性约束条件,课程号是外码,被参照表是课程7FOREIGNKEY(教师号)REFERENCES教师(教师号)〃表级完整性约束条件,教师号是外码,被参照表是教师*/);select课程名From教师,课程,授课Where授课.课程号=课程.课程号and授课.教师号=教师.教师号and教师.教研室=“基础会计”;SELECTDISTINCT姓名学号课程号成绩93018266018793084268796893090266019305626003899309226003989301826045学号姓名性别出生口期奖学金93018欧美林女75/06/06是93056王一平女76/08/06否93084周元男75/09/12是93090李为女76/01/12否93092王大力男75/12/23是课程号课程名称学分开课系开课学期26601数据库3计算机系第一学期26003英语4外语系第二:学期26781大学语文4社科学院第一学期26045高等数学4数学系笫一学期26879市场营销2财会系第二学期职工号姓名年龄月工资部门号电话办公室1001郑俊华26100018001234主楼2011002王平27110018001234主楼2012001王晓华381300280012351号楼3022002李力24800280012361号楼3033001黎运军42130038001237主楼2024001李源24800480012452号楼1024002李兴民361200480012462号楼1035001赵欣250Null••••••部门号部门名负责人代码任职时间1人事处10022004-8-32机关20012004-8-33销售科4生产科40022003-6-15车间Grade其中Sno是学号是课程名,Grade是成绩A.SB..在SQL语言中A.投影运算.在SQL语言中A.投影运算.在SQL语言中Sname是学生姓名Ssex是学生性别Cno是课程号,Cname要查询选修了“数据库”课程的男生姓名,要涉及关系DSSCC.CSCD.SCSCSELECT子句实现关系代数的1_oB.选择运算C.连接运算D.交运算WHERE子句实现关系代数的」_.B.选择运算C.连接运算D.交运算为了在查询结果中去掉重复元组,要使用保留字工—O。