数据库原理与技术简明教程第二版课后习题参考答案Word格式文档下载.docx
《数据库原理与技术简明教程第二版课后习题参考答案Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据库原理与技术简明教程第二版课后习题参考答案Word格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。
![数据库原理与技术简明教程第二版课后习题参考答案Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2022-11/22/187519bc-c5a1-42ff-ab26-9ab92a8dfc39/187519bc-c5a1-42ff-ab26-9ab92a8dfc391.gif)
90
500
3.略
4.略
5.略
6.略
7.略
8.略
9.略
第2章
实践环节设计:
1.CREATETABLEStudent(
Snochar(7)PRIMARYKEY,
Snamechar(10)NOTNULL,
Ssexchar
(2)CHECK(Ssex='
男'
ORSsex='
女'
),
SagetinyintCHECK(Sage>
=15ANDSage<
=45),
Sdeptchar(20)DEFAULT'
计算机系'
)
CREATETABLECourse(
Cnochar(10)NOTNULL,
Cnamechar(20)NOTNULL,
CcredittinyintCHECK(Ccredit>
0),
SemestertinyintCHECK(Semester>
PeriodintCHECK(Period>
PRIMARYKEY(Cno))
CREATETABLESC(
Snochar(7)NOTNULL,
Gradetinyint,
CHECK(Grade>
=0ANDGrade<
=100),
PRIMARYKEY(Sno,Cno),
FOREIGNKEY(Sno)REFERENCESStudent(Sno),
FOREIGNKEY(Cno)REFERENCESCourse(Cno))
2.Insertintostudentvalues(‘9512101’,’李勇’,’男’,19,’计算机系’)
Insertintocoursevalues(‘co1’,’数据库原理’,3,4,64)
Insertintoscvalues(‘9512101’,’co1’,90)
3.DropTABLEstudent
4ALTERTABLESC
ADDXKLBchar(4)
5ALTERTABLESC
ALTERCOLUMNXKLBchar(6)
6Altertablescdropcolumnxklb
7SELECTSno,SnameFROMStudent
8SELECTSnameFROMStudentWHERESdept='
9SELECTSname,SageFROMStudentWHERESage<
20
或:
SELECTSname,SageFROMStudentWHERENOTSage>
=20
10SELECTSname,Sdept,SageFROMStudent
WHERESageBETWEEN20AND23
此句等价于:
SELECTSname,Sdept,SageFROMStudent
WHERESage>
=20ANDSage<
=23
11SELECTSname,SsexFROMStudent
WHERESdeptIN('
信息系'
'
数学系'
)
SELECTSname,SsexFROMStudent
WHERESdept='
ORSdept='
OR
Sdept='
计算机系‘
12SELECT*FROMStudentWHERESnameLIKE‘张%’
13SELECT*FROMStudentWHERESnameLIKE‘[张李刘]%’
14SELECTSname,SnoFROMStudentWHERESnameLIKE'
_[小大]%'
15SELECTSno,CnoFROMSCWHEREGradeISNOTNULL
16SELECTSnameFROMStudent
WHERESdept=计算机系'
ANDSage<
20
17SELECTSno,GradeFROMSC
WHERECno='
c02'
ORDERBYGradeDESC
18SELECT*FROMStudent
ORDERBYSdept,SageDESC
19SELECTCOUNT(DISTINCTSno)FROMSC
20SELECTSUM(Grade)FROMSCWHERESno='
9512101'
21SELECTAVG(Grade)FROMSCWHERECno='
C01'
22SELECTMAX(Grade),MIN(Grade)FROMSCWHERECno='
23SELECTCnoAS课程号,COUNT(Sno)AS选课人数
FROMSCGROUPBYCno
24SELECTSno学号,COUNT(*)选课门数,
AVG(Grade)平均成绩FROMSC
GROUPBYSno
25SELECTSnoFROMSCGROUPBYSno
HAVINGCOUNT(*)>
26SELECTSno,AVG(Grade)平均成绩,COUNT(*)修课门数
FROMSCGROUPBYSnoHAVINGCOUNT(*)>
=2
27SELECTSname,Cno,Grade
FROMStudentJOINSCONStudent.Sno=SC.Sno
28SELECTSname,Cname,Grade
FROMStudentsJOINSCONs.Sno=SC.Sno
JOINCoursecONc.Cno=SC.Cno
ANDCname='
VB'
29SELECTS2.Sname,S2.Sdept
FROMStudentS1JOINStudentS2
ONS1.Sdept=S2.Sdept
WHERES1.Sname='
刘晨'
ANDS2.Sname!
='
刘晨’
或SELECTSname,SdeptFROMStudent
WHERESdeptIN
(SELECTSdeptFROMStudent
WHERESname='
30SELECTStudent.Sno,Sname,
Cno,GradeFROMStudent
LEFTOUTERJOINSC
ONStudent.Sno=SC.Sno
也可以用右外连接实现:
SELECTStudent.Sno,Sname,
Cno,GradeFROMSC
RIGHTOUTERJOINStudent
31SELECTSno,SnameFROMStudent
WHERESnoIN
(SELECTSnoFROMSC
WHERECnoIN
(SELECTCnoFROMCourse
WHERECname='
数据库原理'
))
用多表连接实现:
SELECTStudent.Sno,SnameFROMStudent
JOINSCONStudent.Sno=SC.Sno
JOINCourseONCourse.Cno=SC.Cno
WHERECname='
32SELECTSno,GradeFROMSC
WHERECno='
ANDGrade>
(
SELECTAVG(Grade)FROMSC
33INSERTINTOStudentVALUES(‘9521105’,‘陈冬’,
'
18,'
34UPDATEStudentSETSage=21
WHERESno='
35DELETEFROMSCWHEREGrade<
60
36DELETEFROMSC
WHEREGrade<
60ANDSnoIN(
SELECTSnoFROMStudent
WHERESdept=‘计算机系’)
用多表连接实现
DELETEFROMSC
FROMSCJOINStudent
ONSC.Sno=Student.Sno
WHERESdept=‘计算机系’ANDGrade<
37deletefromscwheresnoin(selectsnofromstudent
wheresname=’李勇’)andcnoin
(selectcnofromcoursewherecname=’数据库原理’)
多表连接方式:
deletefromsc
fromscjoinstudentonsc.sno=student.sno
joincourseono=o
wheresname=’李勇’andcname=’数据库原理’
38
selectstudent.*,course.*
fromstudentjoinsconstudent.sno=sc.sno
wheresnoin(selectsnofromscgroupbysno
havingcount(cno)>
2)
派生关系(没调试,可以不讲):
join(selectsnofromscgroupbysnohavingcount(cno)>
3)astt(sno)ontt.sno=student.sno
39(方法可以有很多种)
select*fromstudentwheresnoin(
selectsnofromscwheregrade=(
selectmax(grade)fromscwherecno=(selectcnofromcoursewherecname=’数据库原理’
)andcno=(selectcnofromcoursewherecname=’数据库原理’)
40select*fromstudentwheresnoin(
selectsnofromscjoin(
selectmax(grade),cnofromscgroupbycno)asmax_grade(m_grade,cno)
ono=max_oandsc.grade=max_grade.m_grade
41
selectsnofromscgroupbysno
havingcount(*)>
=all(
selectcount(*)fromscgroupbysno
42略
43略
44selecttop3withtiessname,sdept,gradefromstudentjoinscon
Student.sno=sc.snojoincourseono=owherecname=’VB’orderbygradedesc
45selectsname,sdeptfromstudentwheresnonotin
(selectsnofromscwherecno=’c01’)
Selectsname,sdeptfromstudentwherenotexists(select*fromscwheresno=student.snoandcno=’c01’)
46selectTop3sname,sage,sdeptfromstudentorderbysagedesc
47selectcno,count(*)astotal,avg(grade)asavggrade,max(grade)asmaxgrade,min(grade)asmingradefromstudentjoinsconstudent.sno=sc.snowheresdept=’计算机系’groupbycno
48selectame,c1.creditfromcoursec1joincoursec2onc1.credit=c2.creditwhereame=’数据结构’
49selecto,cnamefromcoursecleftjoinscono=owhereoisnull
50selectsname,sexfromstudentwheresnonotin(
Selectsnofromscjoincourseono=owherecname=’VB’)
Andsdept=’计算机系’
习题:
BBADA/CBAAD/BDDAB/CCCBB
已知有顾客购买商品信息的三张表:
顾客表Customer、定购表Order、商品表Commodity。
按要求创建三张表:
1.表名:
Customer
属性:
ID字符型最大10个字符——顾客编号
NAME字符型最大16个字符——顾客姓名
SEX字符型最大2个字符——性别
MOBILE字符型最大11个字符——移动电话
ADDRESS字符型最大50个字符——家庭住址
约束:
ID——主码;
NAME——非空属性;
SEX——取值“男”或“女”;
MOBILE——唯一性;
ADDRESS——默认为UNKOWN;
表名:
OrderBook
属性:
CSID字符型最大10个字符——顾客编号
CMID字符型最大12个字符——商品编号
COUNT整型——定购数量
BOOKDATE日期型——订货日期
TAKEDATE日期型——交货日期
约束:
CSID,CMID——主码;
定购数量要大于0;
订货日期要小于交货日期;
CSID——外码,引用Customer表的ID;
CMID——外码,引用Commodity表的ID;
Commodity
ID字符型最大12个字符——商品编号
NAME字符型最大20个字符——商品名称
MANUFACTURE字符型最大20个字符——生产厂商
PRICE小数型最大不超过4位数,保留2位小数——商品单价
ID——主码;
NAME——非空;
针对上面的三个基本表做如下练习:
2.往基本表Customer中插入顾客元组(”0421F901”,”WU”,”女”,)
3.往基本表Commodity中插入一条商品记录(“091”,“牙膏”,“保洁公司”,5.00)
4.修改“WANGYAN”顾客定购商品的记录交货日期为2005-12-25。
Updateordersettaketime=’2005-12-25’wherecsidin(selectidfromcustomerwherename=’wangyan’)
5.查询“ANAN”顾客的手机号和住址。
Selectmobile,addressfromcustomerwherename=’anan’
6.查询商品的平均价格高于75元钱的厂商名称。
Selectmanufacturefromcommoditygroupbymanufacturehavingavg(price)>
7.查询顾客的定购信息,并按订货日期升序排列,若订货日期相同,则按定购数量降序排列。
Select*fromorderbookorderbybookdate,countdesc
8.查询定购数量超过100的顾客姓名、电话和住址。
Selectname,mobile,addressfromcustomerwhereidin(selectcsidfromorderbookwherecount>
100)
9.查询没有订单的商品编号、名称和厂商。
Selectid,name,manufacturefromcomoditywhereidnotin(selectcsidfromorderbook)
10.查询定购了商品号为“M1”的顾客总人数和最高数量。
Selectcount(*),max(count)fromorderwherecmid=’m1’
11.查询定购了“可比克”商品的顾客编号、姓名。
Selectid,namefromcustomerwhereidin(selectcsidfromorderwherecmidin(selectidfromcomoditywherename=’可比克’))
12.查询商品名中包含“糖”的所有商品的编号、厂商、单价。
Selectid,manufacture,pricefromcomoditywherenamelike‘%糖%’
13.查询至少有两位顾客定购的商品的名称。
Selectnamefromcomoditywhereidin(selectcmidfromordergroupbycmidhavingcount(*)>
=2)
14.查询截至2005年底所有商品订单最晚的交货日期。
SELECTtaketimefromorderwheretaketime=(selectmax(taketime)fromorderwheretaketime<
’2005-12-31’)
15.查询住址中含有“软件园”三个字的顾客人数。
Selectcount(*)fromcustomerwhereaddresslike’%软件园%’
16.查询订购了“保洁公司”生产的产品中价格最高的商品的客户信息。
Selectcustomer.*fromcustomer,OrderBook,Commoditywherecustomer.id=orderbook.CSIDandCommodity.id=orderbook.cmidandCommodity.idin
(SelectidfromCommoditywhereMANUFACTURE=“保洁公司”andprice=(
Selectmax(price)fromCommoditywhereMANUFACTURE=“保洁公司”))
17.查询2007年3月份住址在“大连”的顾客对“上好佳”商品的定购信息,列出顾客姓名,商品数量和定购日期。
Selectcustomer.name,count,BOOKDATEfromcustomer,OrderBook,Commoditywherecustomer.id=orderbook.CSIDandCommodity.id=orderbook.cmidandADDRESSlike
‘%大连%’andCommodity.name=’上好佳’andBOOKDATEbetween2007-03-01and2007-03-31
18.查询订单最多的顾客姓名。
Selectnamefromcustomerwhereidin(
SelectCSIDfromOrderBookgroupbycsidhavingcount(*)>
=all(select
Count(*)fromorderbookgroupbycsid))
19.查询定购了“保洁公司”的商品最多的客户信息。
Select*fromcustomerwhereidin(
Selectcsidfromorderbookwherecmidin(SelectidfromCommoditywhereMANUFACTURE=“保洁公司”)groupbycsidhavingcount(*)>
=all(selectcount(*)fromorderbookwherecmidin(SelectidfromCommoditywhereMANUFACTURE=“保洁公司”)groupbycsid))
20.把“雀巢奶粉”的定购商品记录全部删去。
Deletefromorderwherecmidin(selectidfromcommoditywherename=’雀巢奶粉’)
第3章
1.实体完整性和参照完整性。
2.主码唯一、外码参考。
3.主码。
4.实体完整性和参照完整性
5.属性列
6.投影选择
7.选择投影连接除
8.Whereselect
9.a1+b1
10.a2*b2
11.
(student)
12.
13.
(student