《数据库原理与应用 教学作者林 小 玲第3章习题答案.docx》由会员分享,可在线阅读,更多相关《数据库原理与应用 教学作者林 小 玲第3章习题答案.docx(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第3章习题答案一、填空题1. 在SQL语言的结构中,二基本表 有对应的物理存储,而一视图 没有对应的物 理存储。2. SQL语言中,向数据库表中插入数据的命令是:INSERT.3. SQL语言中,对用户授权使用(GRANT )语句,而取消所授的权限使用(REVOKE ) 语句。4. SQL 的中文全称是:Slruclured Ouery Language。5. SQL除了具有数据查询和数据操纵功能外,还具有数据定义 和数据控制功能。6. 在SOL语言中,实现数据检索的语句是SELECT 。7. 关系R(A, B, C)和S( A, D, E, F)有相同的属性A,关系代数表达式FIr.b.d.
2、f( RS )可用SQL的查询语句表达为:SELECT R.A, B, D, FFROM R, SWHERE R.A=S.A8. 视图是从基本表一中导出的表,数据库中实际存放的是视图的国区_。9. 设有关系表 R(BH,XM, XB.DWH)、S(DWH, DWM)、T(BH, XM, XB, DWH),贝IJ:(1)实现RUT的SQL语句是:Select BH, XM, XB, R.DWH ,DWMFrom R,SWhere R.DWH=S.DWH;(2)实现。dwh=oo (R)的SQL语句是:Select *From RWhere DWH=,100,;(3)实现CIxm.xb(R)的SQ
3、L语句是:Select XM,XBFrom RFROM教师WHERE NOT EXISTS(SELECT *FROM教师1 ,授课WHERE教师1.教师号=授课.教师号AND教师1.姓名=李军ANDNOT EXISTS(SELECT *FROM授课1WHERE教师.教师号二授课1.教师号AND授课1.课号二授课.课号);(4) Select课程.课程名,教师.教师名,Count (授课.选课人数)From授课,教师,课程Group by教师号Having Max(选课人数)AND授课.教师号二教师.教师号AND授课.课程号二课程. 课程号;(5) Select教师.教师名,Couni (授课.
4、课程号)*课程.学时From授课,教师,课程Group by教师号Having授课.教师号=教师.教师号AND授课.课程号=课程.课程号;2.写出下列查询的SQL语句现有关系数据库:学生(学号,姓名,性别,出生日期,奖学金)、课程(课程号,课程 名称,学分,开课系,开课学期)、选课(学号,课程号,成绩),内容如下表。选课:学号课程号成绩93018266018793084268796893090266019305626003899309226003989301826045学生:(奖学金为字符型字段)学号姓名性别出生口期奖学金93018欧美林女75/06/06是93056王一平女76/08/06否
5、93084周元男75/09/12是93090李为女76/01/12否93092王大力男75/12/23是课程课程号课程名称学分开课系开课学期26601数据库3计算机系第一学期26003英语4外语系第二:学期26781大学语文4社科学院第一学期26045高等数学4数学系笫一学期26879市场营销2财会系第二学期写出下列查询的SQL语句。(字段名用表中所给的名称)(1)查询所有得过奖学金的女学生的学号、姓名。(2)查询计算机系第二学期所开课程的课程名称和学分。(3)查询每位学生所选课程的门数和总平均成绩。(4)查询缺成绩的学生的姓名、缺成绩的课程名称及学分数。(5)杳询选修计算机系所开设的所有课程
6、的学生姓名。(6)创建一个社科学院所开设课程的视图,包含课程号、课程名、学分。解:(1)查询所有得过奖学金的女学生的学号、姓名。Select学号From学生Where性别:女and奖学金=是(2)查询计算机系第二学期所开课程的课程名称和学分。Select课程名称,学分From课程Where开课系=计算机系and开课学期:第二学期(3)查询每位学生所选课程的门数和总平均成绩。Select COUNT (课程号),AVG(成绩)From选课Group By 学号(4)查询缺成绩的学生的姓名、缺成绩的课程名称及学分数。Select姓名,课程名称,学分From学生,课程,选课Where学生.学号二课程
7、.学号and课程.课程号=选课.课程号and成绩IS NULL (5)查询选修计算机系所开设的所有课程的学生姓名。SELECT姓名FROM学生WHERE NOT EXISTS(SELECT *FROM课程WHERE开课系=计算机系AND NOT EXISTS(SELECT *FROM选课WHERE学号二学生.学号AND课程号二课程.课程号)(6)创建一个社科学院所开设课程的视图,包含课程号、课程名、学分。CREATE VIEW IS_课程ASSELECT课程号,课程名,学分FROM 课程WHERE开课系二,社科学院*3.设图书借阅数据库有关系图书(图书编号,书名,作者,出版社,出版时间,图书类
8、别)、 读者(读者编号,姓名,读者类别)和借阅(读者编号,图书编号,借阅H期,还期)。其中, 读者类别为字符型,可以取值学生和教师,图书类别为字符型,取值为经济类、 管理类、外语类、计算机类等。试用SQL语句完成下列查询。对图书借阅数据库完成以下操作:(1)查询借阅了作者为“张强”的图书的读者编号和图书编号。(2)创建一个视图vl,该视图用来查询教师的借阅情况,要求包含:教师姓名、书名、 借阅日期、还期。(3)查询所借的书名中包含“程序设计”这四个字的读者的读者编号和借阅日期。(4)根据图书类别统计各类图书的借书数量并按数量由大到小排序。(5)删除出版社是“电子出版社”的借书记录。(6)查询借
9、阅了 “电子出版社”和“机械出版社”出版的图书的读者编号。解:(1) Select读者编号,图书编号From借阅,图书Where借阅.图书编号=图书.图书编号AND图书.作者=张强;(2) CREATE VIEW VIASSELECT教师姓名,书名,借阅日期,还期FROM 图书,读者,借阅WHERE借阅.图书编号:图书.图书编号AND读者.读者类别=教师;(3)Select读者编号,借阅日期From借阅,图书Where借阅.图书编号二图书.图书编号AND图书.书名like,程序设计;Select图书类别,SUM (借阅.图书编号)From借阅,图书Group by图书类别Having借阅.图书
10、编号二图书.图书编号Order by:(4) DELETEFROM借阅WHERE,图书编号,=(SELETE图书编号FROM 图书WHERE图书.出版社:电子出版社;(5) Select读者编号From借阅,图书Where借阅.图书编号:图书.图书编号AND图书.出版社:电子出版社OR图书.出版社二机械工业出版社;4.阅读下列说明,回答问题1至问题5。某工厂的信息管理数据库的部分关系模式如下所示:职工(职工号,姓名,年龄,月工资,部门号,电话,办公室)部门(部门号,部门名,负责人代码,任职时间)关系模式的主要属性、含义及约束如表1所示,“职工”和“部门”的关系示例分别如表2和表3所示。表1主要
11、属性、含义及约束属性含义及约束职工号职工号唯一标识每个职工的编号,每个职工属于并且仅属于一个部门部门号 唯一标识每个部门的编号,每个部门有一个负责人,且他也是一个职工 月工资 500W月工版5000 于表2 “职工”关系职工号姓名年龄月工资部门号电话办公室1001郑俊华26100018001234主楼2011002王平27110018001234主楼2012001王晓华381300280012351号楼3022002李力24800280012361号楼3033001黎运军42130038001237主楼2024001李源24800480012452号楼1024002李兴民36120048001
12、2462号楼1035001赵欣250Null 表3 “部门”关系部门号部门名负责人代码任职时间1人事处10022004-8-32机关20012004-8-33销售科4生产科40022003-6-15车间【问题1】根据上述说明,由SQL定义的“职工”和“部门”的关系模式,以及统计各部门的人数 C、工资总数Totals、平均工资Averages的D_S视图如下所示,请在空缺处填入正确的内 容。Create Table 部门(部门号 CHAR(l) PRIMARY KEY ,部门名 CHAR (16),负责人代码CHAR (4), 任职时间DATE,FOREIGN KEY (负责人代码)REFERE
13、NCES职T.(职工号);Create Table 职工(职工号 CHAR (4),姓名 CHAR (8),年龄 NUMBER (3),月工资 NUMBER(4),部门号CHAR(l),电话 CHAR (8),办公室CHAR (8),FOREIGN KEY(负贵人代码)REFERENCES职工(职工号),FOR日GN KEY (部口号)REFERENCES 部门,CHECK(月工资=500 AND 月工资=5000 );Create View D _S(D, C, Totals, Averages)As,(Select 部门号, count (*) , AVG (月工资),SUM (月工资)f
14、rom职工Group by 部门号【问题2对于表2、表3所示的“职工”和“部门”关系,请指出下列各行是否可以插入, 为什么?1 1001 王新军 28 100018001234 主楼 201答:该行不能插入“职工”关系,它违反了实体完整性中主码必须唯一区分关系中的每一个 属性2 2003 李力 28 1000答:该行可以插入“职工”关系,尽管部门号、电话和办公室为空,但是它表示该雇员没有 分配到某个部门。3 5802 赵晓啸 36 150068001568 3 号楼 503答:该行不能插入“职工”关系,它违反了参照完整性。因为6在关系“部门中不存在。【问题3】在问题1定义的视图D_S上,下面那
15、个查询或更新是允许执行的,为什么?(l)Update D_S set=3 where D=4;(2)Delete from D_S where 04;(3)Select D Averages fromD_S where C(Select C from D S where D=: dept);(4)Select D, C From D S where Totals10000;(5)Select * from D_S;答:(1)和(2)都不能更新,因为使用分组合聚集函数定义的视图是不可更新的。(3)不一定,视子查询的返回值而定,(4)和(5)允许查询【问题4】查询每个部门中月工资最高的“职工号”的
16、SQ1查询语句如下:Select职工号from职工Ewhere月工资=(Select Max(月工资)from职工as M where M.部门号=E.部门号)(1)请用30字以内文字简要说明该查询语句对查询效率的影响。答:对于外层的职工关系E中的每一个元组,都要对内层的整个职工关系M进行检索, 因此查询效率不高。(2)对该查询语句进行修改,使它既可以完成相同功能,又可以提高查询效率。(2)解答一:改正后的SQL语句使用了临时表:Select Max(月工资)as最高工资,部门号into Temp from职工Group by部门号Select职工号from职工,Tempwhere月工资:最高
17、工资and职工.部门号二Temp.部门号解答二:Select职工号from职工,(Selecl Max(月工资)as最高工资,部门号Group by 部门号)as depMaxwhere月工资二最高工资and职工.部门号二depMax.部门号 【问题5】假定分别在“职工”关系中的“年龄”和月工资字段上创建了索引,如下的Select 杳询语句可能不会促使查询优化器使用索引,从而降低查询效率,请写出既可以完成相同功 能又可以提高查询效率的SQL语句。Select姓名,年龄,月工资from职工where 年龄45 or 月工资10()0;答:Selecl姓名,年龄,月工资from职工where 年龄
18、45;unionSelect姓名,年龄,月工资from职工where年龄月工资1000;(4)实现 ITxm,dwh(oxb=,女,(R)的 SQL 语句是:Select XM,DWHFrom RWhcrcXB=女;(5)实现R x S的SQL语句是:Select *From R,SWhere R.DWH=S.DWH;(6)实现 nxM,XB.DWH(OXB5(R x S)的 SQL 语句是:Select XM, XB, DWHFrom R.SWhere R.DWH=S.DWH and XB=男;10.设有学生关系S(No, Name, Sex, Age, Class),其中,No是学号,Na
19、me是姓 名,Sex是性别,Age是年龄,Class是班级,N。和Age为整型,其余为字符型,则:(I)实现插入记录(25,李明男,21,,9503)的SQL语句是:INSERTINTO S(No, Name, Name, Age, Class)VALUES (25,李明,男,21, 95031);(2)插入,95031,班学号为30、姓名为郑和的学生记录,要用的SQL语句是:INSERTINTO S(No, Name, Class)VALUES (30,郑和,95031)(3)实现将学号为10的学生姓名改为,王华,、性别改为女,的SQL语句是:UPDATE S5丁回联二王华,Sex,女,WH
20、ERE no=10;(4)实现将班级95101,改为,95091,的SQL语句是:UPDATE SSET Class =z 9509 HWHERE Class=,9510 V;(5)实现删除学号为20的学生记录的SQL语句是:DELETEFROM SWHERE no= 20;(6)实现删除所有姓,王,的学生记录的SQL语句是:DELETEFROM SWHERE Name =like王;二、单项选择题1 . SQL语言是3 oA.过程化语言 B.宿主语言 C.汇编语言 D.非过程化语言2 .在视图上不能完成的操作是A.更新视图 B.查询C.在视图上定义基本表D.在视图上定义新的视图3 . SQL
21、语言集数据查询、数据操纵、数据定义和数据控制功能于体,其中CREATE.DROP、ALTER语句实现C 功能。A.数据查询 B.数据操纵C.数据定义D.数据控制4 .在SQL语言中,删除一个视图的命令是A 。A. DELETEB. DROP C. CLEAR D. REMOVE5 .在SQL语言中,视图对应于数据库的oA.外模式 B.模式 C.内模式 D.存储模式6 .在下列SQL语句中, D 不是数据定义语句。A. CREATE TABLEB. DROP VIEWC. CREATE VIEWD. GRANT7 .若要除去数据库中已经存在的表S,可用A A. DELETE TABLESB. D
22、ELETE SC. DROP TABLESD. DROPS8 .若要在基本表S中增加一列CN,可用)oA. ADD TABLE S(CN CHAR(8)B. ADD TABLE S ALTER(CN CHAR(8)C. ALTER TABLE S ADD (CN CHAR(8)D. ALTER TABLE S (ADD CN CHAR(8)9 .若要删除关系模式S(Sno, Sname, Ssex, Sage)的Sage属性,可用B A. DELETE Sage FROM SB. ALTER TABLE S DROP SageC. UPDATE S SageD. ALTER TABLE S S
23、age510 .设有学生关系 S(Sno, Sname, Sage),课程关系 C(Cno, Cname),选修关系 SC(Sno, Cno, Grade),其中Sno是学号,Sname是学生姓名,Sage是学生年龄,Cno是课程号,Cname 是课程名,Grade是成绩。要查询选修了“ACCESS”课程的年龄不小于20的全体学生姓名, 可用 SELECT SNAME FROM S, C, SC WHERE A 语句实现。A. S.Sno=SC.Sno and C.Cno=SC.Cno and Sage =20 and Cname = ACCESS,B. S.Sno=SC.Sno and C.
24、Cno=SC.Cno and Sage in =20 and Cname in ACCESSC. Sage in =20 and Cname in ACCESS4D. Sage in =20 and Cname = ACCESS11 .设关系数据库中表S的结构是S(SN,CN,GRADE),其中SN为学生姓名,CN为课 程名,二者均为字符型;GRADE为成绩,数值型,取值范围。100。若要把“张二的化学 成绩为80分”插入S中,则可用D 。A. ADD INTO S VALUES(张二化学80)B. INSERT INTO S VALUES(张二化学80)C. ADD INTO S VALUE
25、S(张二化学80)D. INSERT INTO S VALUES(张二化学,80)12 .设关系数据库中表S的结构是S(SN, CN, GRADE),其中SN为学生姓名,CN为 课程名,二者均为字符型:GRADE为成绩,数值型,取值范围。100。若要将张二的化学 成绩改为85分,则可用A 。A. UPDATE S SET GRADE=85 WHERE SN=张二and CN=化学B. UPDATES SETGRADE=85, WHERE SN=张二and CN=化学C. UPDATE GRADE=85 WHERE SN=,张二,and CN二,化学D. UPDATE GRADE=85 WHER
26、E SN=张二and CN=化学13 .在SQL语言中,子查询是一 D 。A.返回单表中数据子集的查询语句B.返回多表中字段子集的查询语句C.选取单表中字段子集的查询语句D.嵌入到另一个查询语句之中的查询语句14 .设有学生关系 S(Sno, Sname, Ssex),课程关系 C(Cno, Cname),选修关系 SC(Sno, Cno, Grade),其中Sno是学号,Sname是学生姓名,Ssex是学生性别,Cno是课程号,Cname 是课程名,Grade是成绩。要查询选修了“数据库”课程的全体男生姓名,可用SELECT SNAME FROM S, C, SC WHERE A 语句实现。
27、A. S.Sno=SC.Sno and C.Cno=SC.Cno and Ssex=男and Cname =数据库B. S.Sno=SC.Sno and C.Cno=SC.Cno and Sscx in 男and Cname in 数据库C. Ssex 男and Cname 数据库D. Ssex=男and Cname =数据库,15 .若用如下的SQL语句创建一个表SC:CREATE TABLE SC( Sno CHAR (6) NOT NULL,Cno CHAR(3) NOT NULL,Grade INT,NOTE CHAR(20),则INSERT INTO SC VALUES B 可以成功
28、执行。A. (201009,111, 60,必修) B. (,200823; *101; NULL, NULL)C. (NULLJ103, 80,选修)D. (201132; NULL, 86, H)16 .设有学生关系 S(Sno, Sname, Ssex),课程关系 C(Cno, Cname),选修关系 SC(Sno, Cno,A. UNIQUEGrade),其中Sno是学号 是课程名,Grade是成绩, A. SB.17 .在SQL语言中, A.投影运算18 .在SQL语言中, A.投影运算19 .在SQL语言中,Sname是学生姓名,Ssex是学生性别,Cno是课程号,Cname ,要
29、查询选修了“数据库”课程的男生姓名,要涉及关系D 。,S, SCC. C, SCD. S, C, SCSELECT子句实现关系代数的1_oB.选择运算C.连接运算D.交运算WHERE子句实现关系代数的_.B.选择运算C.连接运算D.交运算为了在查询结果中去掉重复元组,要使用保留字工OB. COUNTC. DISTINCTD. UNION20 .在SQL语言中,下列涉及空值的操作,不正确的是 (其中AGE是一个属 性名)。A. AGE IS NULLB. AGE IS NOT NULLC. AGE=NULLD. NOT ( AGE IS NULL)21 .设有一个关系:DEPT(DNO, DNA
30、ME),如果要找出倒数第三个字母为W,并且 至少包含4个字母的DNAME,则查询条件子句应写成WHERE DNAME LIKE I)。A. W_%B. _W_% C.D. _%W22 .当SELECT语句涉及多张表时,其WHERE子句需要给出 D 。A.仅选择条件 B.仅连接条件C.连接条件或选择条件D.连接条件和选择条件23 .在SQL中,与NOT IN等价的操作符是一 D .A. =ANY B. oANY C. =ALL D. ALL24 .在 SQL 中,SALARY IN (1000. 20(X)的含义是一 D 0A. SALARY = 1000B. SALARY 1000C. SAL
31、ARY =2000 AND SALARY= 1000D. SALARY =2000 OR SALARY= 100025 .某SQL语句要杳找所有姓张的职工,下列涉及条件判断的操作,正确的是一 AA. where 姓名 like “张”B. where 姓名=“张”C. where 姓名 like”张*D. where 姓名 like“张?”26 . SQL语句中,下列涉及空值的操作,不正确的是一 C 。A. SCORE IS NULL B. SCORE IS NOT NULLC. SCORE = NULL D. NOT (SCORE IS NULL)27.查询选修了课程号为“C2”的学生中成绩
32、最高的学生的学号,正确的SELECT语 句是C .A. SELECT Sno FROM SC WHERE Cno=C2 AND GRADE=ALL(SELECT GRADE FROM SC WHERE Cno= C2)B. SELECT Sno FROM SC WHERE GRADE IN(SELECT MAX(GRADE) FROM SC WHERE Cno=C2)C. SELECT Sno FROM SC WHERE Cno=C2 AND GRADE二(SELECT MAX(GRADE) FROM SC WHERE Cno=C2)D. SELECT Sno FROM SC WHERE Cn
33、o=C2 AND GRADE=ANY(SELECT GRADE FROM SC WHERE Cno= C2)三、简述题1 .简述SELECT语句中的表别名的用法及作用。2 .在什么情况下一个子查询可以参与表达式运算,试举一个例子。3 .什么是基本表?什么是视图?两者的区别和联系是什么?答:基本表是本身独立存在的表,在SQL中一个关系就对应一个表。视图是从一个或几个基本表导出的表。视图本身不独立存储在数据库中,是一个虚表。 即数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本 表中。视图在概念上与基本表等同,用户可以如同基本表那样使用视图,可以在视图上再定义 视图。4
34、 .所有的视图是否都可以更新?为什么?答:不是。视图是不实际存储数据的虚表,因此对视图的更新,最终要转换为对基本表的 更新。因为有些视图的更新不能惟一有意义地转换成对相应基本表的更新,所以,并不是所有 的视图都是可更新的。例如:视图S_G(学生的学号及他的平均成绩)CREATE VIEW S_G(Sno,Gavg)AS SELECT Sno, AVG(Grade) /*设 SC 表中“成绩列 Grade 为数字型*/FROM SCGROUP BY Sno;要修改平均成绩,必须修改各科成绩,而我们无法知道哪些课程成绩的变化导致了平均 成绩的变化。5 .在供应商、零件数据库中有以下3个关系模式:供
35、应商:S(SNO, SNAME, CITY, STATUS)零件:P(PNO, PNAME, WEIGHT, COLOR, CITY)供应货:SP(SNO, PNO, QTY)各属性的含义可由属性名体现,不再重复,供应货关系SP表示某供应商SNO,供应 了 PNO零件,数量为QTY。用SQL语言完成以下操作:(1)求供应红色零件的供应商名字;(2)求北京供应商的号码、名字和状况(STATUS);(3)求零件P2的总供应量;(4)把零件P2的重量增加(5)颜色该为黄色。(1)求供应红色零件的供应商名字;Select SNAMEFrom S, P ,SPWhere S.SNO=SP.SNO and
36、 P.PNO=SP.PNO and P.COLORd红,;(2)求北京供应商的号码、名字和状况(STATUS);Select SNO, SNAME, STATUSFrom SWhere CITY=北京,;(3)求零件P2的总供应量;Select sum(QTY)From SPWhere PNO=P2(4)把零件P2的重量增加Updata PSet WEIGHT= WEIGHT+2Where PNO=,P2,(5)颜色该为黄色。Updata PSet Color=,黄Where PNO=,P2,6.关系模式如下:商品 P (PNO, PNAME, COLOR, PRICE)商店 S (SNO,
37、SNAME, CITY)销售 SP (PNO, SNO, QTY)(1)用SQL语句实现如下查询:查询出售商品“TV”的商店名SNAME;(2)将上述SQL语句转化为等价的关系代数表达式;(1) SELECT SNAMEFROM S, SP, PWHERE S.SNO=SP.SNO AND P.PNO=SP.PNO AND P.PNAME= TV”(2)乃SNAA/E(bp=17V,(S V SP P)四、综合题1.设某系的教师_授课数据库有三个基本表:教师(教师号,姓名,性别,职称,教研 室);课程(课程号,课程名称,学时);授课(教师号,课程号,选课人数) 其中1)教师表的主码为教师号2)
38、课程表的主码为课程号3)授课表的主码为教师号和课程号,教师号是外码,课程号也是外码 用SQL语句完成如下操作。(1)定义授课表,并同时定义主码和外码。(2)查找“基础会计”教研室的教师所讲授的课程名称。(3)查找讲授了 “李军”所讲的所有课程的教师姓名。(4)查找选修学生最多的课程名称、教师姓名及选课人数。(5)统计每位教师的教学工作量(即所讲授课程的课时总数)。答: CREATE TABLE授课(教师号CHAR(8)课程号CHAR(10)选课人数SMALLINT);PRIMARY KEY (教师号,课程号),/*主码由两个属性构成,必须作为表级完整性进行定义*/FOREIGN KEY (课程号)REFERENCES 课程(课程号),/*表级完整性约束条件,课程号是外码,被参照表是课程7FOREIGN KEY (教师号)REFERENCES教师(教师号)表级完整性约束条件,教师号是外码,被参照表是教师*/);(2) select课程名From教师,课程,授课Where授课.课程号=课程.课程号and授课.教师号=教师.教师号and教师.教研室=“基础会计”;(3) SELECT DISTINCT 姓名