
2.2 简述关系运算基本运算,导出运算和核心运算。给出使用基本运算表示导出运算的表示方法。
【基本运算】
笛卡尔积×、并集∪(运算后两关系中重复的元组只保留一个)、差集−、选择σ、投影π
【导出运算】
交集 R∩S=R−(R−S)
连接 R.AθS.BR⋈S=σR.AθS.B(R×S)
除 令 Y′=X∩Y
则 R(X)÷S(Y)=πX−Y′(R)−πX−Y′((πX−Y′(R)×πY′(S))−R)
【核心运算】
选择σ、投影π、连接⋈
务必注意,并集、差集、交集运算都要求参与运算的两个关系具有相同的属性集!!!
2.3 简述等值连接和自然连接的的区别和联系。
等值连接:连接条件取等值的连接运算。(即R.A=S.B)
自然连接:具有公共属性且去掉重复列的等值连接。
联系:等值连接和自然连接都是要求属性间按照等值进行连接。
区别:
- 自然连接要求两个关系中相等的分量必须是相同的属性组(存在公共属性/公共字段),等值连接没有该要求。
- 自然连接要在结果中把重复的属性列去重,而等值连接不需要。
2.4 计算R(A,B,C,D,E)÷S(D,E)
R的元组如下:
{(x,a,x,a,1),(x,a,z,a,1),(x,a,z,b,1),(y,a,z,a,1),
(y,a,z,b,1),(z,a,z,a,1),(z,a,z,b,1),(z,a,y,b,1)}
S的元组如下:{(a,1),(b,1)}
结果:{(x,a,z),(y,a,z),(z,a,z)}
2.5 已知工程管理数据库的关系如下:
供应商S(供应商号SNo,供应商名SName,所在城市City)
零件P(零件号PNo,零件名PName,颜色Color,重量Weight)
工程J(工程号JNo,工程名JName,所在城市City)
供应SPJ(SNo,PNo,JNo,供应数量Qty)
注:一个工程可以接收多个供应商的多次供应
请完成如下查询:
(1)查找上海的各工程名。
πJName(σCity=上海(J))
(2)查询供应商(SNo=S1)给工程(JNo=J2)供应的所有零件名。
πPName(σSNo=S1∧JNo=J2(SPJ)⋈P)
(3)查询北京的工程使用蓝色零件的工程名。
πJName(σCity=北京(J)⋈SPJ⋈σColor=蓝色(P))
(4)查询没有使用S1所供应零件的工程号。
πJNo(J)−πJNo(σSNo=S1(SPJ))
(5)查询找出能提供零件号为P3的供应商的编号。
πSNo(σPNo=P3(SPJ))
(6)查询能提供供应商S1所提供的所有零件的供应商
πSNo,PNo(SPJ)÷πPNo(σSNo=S1(SPJ))
(7)查询不提供零件P1和P2的供应商。
πSNo(S)−πSNo(σPNo=P1∨PNo=P2(SPJ))
(8)查询同时提供零件P1和P2的供应商。
πSNo(σPNo=P1(SPJ))∩πSNo(σPNo=P2(SPJ))
(9) 查询同供应商S1在同一城市的供应商所提供的所有零件。
符合题目条件的供应商编号 T=πSNo,City(S)÷πCity(σSNo=S1(S))
符合题目条件的供应商所提供的所有零件 πPNo(T⋈SPJ)
(10)查询供应红色的P1零件,且在某一次供应中供应该种零件的数量大于1000的供应商。
πSNo(σPNo=P1∧Qty>1000∧Color=红色(SPJ⋈P))
2.6 已知读者订单管理数据库的关系如下:
读者Read(读者号RNo,读者名RName,读者身份Status,读者城市City)
图书Book(书号BNo,书名BName,书价Price,出版社Publisher)
订单OrderForm(订单号ODNo,BNo,订书数量Quantity)
订单读者索引Index(ODNo,RNo)
请完成如下查询:
(1)找出科学出版社出版的全部书号和价格。
πBNo,Price(σPublisher=科学出版社(Book))
(2)找出有订单的书名和订单号。
πBName,ODNo(OrderForm⋈Book)
(3)找出订购数量为20的所有订单号和书号。
πODNo,BNo(σQuantity=20(OrderForm))
(4)找出至少订购了“数据库技术”的读者号。
πRNo(σBName=数据库技术(Book⋈OrderForm⋈Index))
(5)找出没有订购任何图书的读者号。
πRNo(Read)−πRNo(OrderForm⋈Index)
2.7 已知商品销售数据库的关系如下:
商品SP(商品码SPNO,商品名SPN)
库存KC(SPNO,库存数量SL1)
销售XS(SPNO,KHNO,销售日期RQ,销售数量SL2,单价DJ)
客户KH(客户码KHNO,客户名KHN)。
请完成以下查询:
(1)查询所有商品的全部信息。
πSPNO,SPN(SP)
(2)查询客户“蓝天食品厂”所购的商品码和数量。
πSPON,SL2(σKHN=蓝天食品厂(XS⋈KH))
(3)查询客户名为‘1616’所购商品的库存数量。
πSL1(σKHN=1616(KH)⋈XS⋈KC)
(4)查询购买所有商品的客户名。
πKHN((KH⋈XS)÷πSPNO(SP))
2.8 已知运输公司数据库的关系如下:
Team(TNo,TName,Phone)
Car(CNo,Company,CDate,TNo)
Driver(DNo,DName,Phone,TNo,WDate)
代码含义:
Team-车队:TNo-车队编号;TName-车队名称;Phone-电话
Car-车辆:CNo-车辆编号;Company-生产厂家;CDate-出厂日期
Driver-司机:DNo-司机编号;DName-姓名;Phone-电话;WDate-聘期
请完成如下查询:
(1)查询生产厂家是“金龙公司”的车辆信息,显示数据为CNo,Company,CDate,TNo。
πCNo,Company,CData,TNo(σCompany=金龙公司(Car))
(2)查询李明司机的名称、电话和聘期,显示数据为DName,Phone,和WDate。其中:Phone为司机的电话。
πDName,Phone,WDate(σDName=李明(Driver))
(3)查询车队编号为“01”的车辆信息,显示数据为TName,Phone,CNo,Company和CDate。其中:Phone为车队的电话。
πTName,Phone,CNo,Company(σTNo=01(Car⋈Team))
(4)查询车队名称为“翔龙车队”的司机信息,显示数据为TName, Phone(该电话为车队电话,DName和Phone(该电话为司机电话)。
πTName,Team.Phone,DName,Driver.Phone(Driver⋈σTName=翔龙车队(Team))
(5)查询运输公司车队、车辆和司机的信息清单,显示数据为TName,Phone(该电话为车队电话,CNo,Company,CDate,DName,Phone(该电话为司机电话)和WDate。
πTName,Team.Phone,CNo,Company,CDate,DName,Driver.Phone(Team⋈Driver⋈Car)
2.9 已知学籍管理数据库的关系如下:
学生S(学号SNo,姓名SName,性别SSex,年龄SAge,班级Class,学院Coll)
课程C(课程号CNo,课程名CName,先修课CPNo,学分Credit)
选课SC(学号SNo,课程号CNo,成绩Grade)
请完成如下任务:
(1)查询男生的基本信息。
σSSex=男(S)
(2)查询学生的姓名、年龄和班级。
πSName,SAge,Class(S)
(3)查询物流1602班的学生的学号。
πSNo(σClass=物流1602(S))
(4)查询选修英语的学生的姓名。
πSName(S⋈SC⋈σCName=英语(C))
(5)查询选修所有课程的学生的学号和姓名
πSNo,SName,CNo(S⋈SC)÷πCNo(C)
(6)把学号、课程号和成绩分别为2016010201、020102和96的元组添加到选课SC。
SC∪(SNo=2016010201,CNo=020102,Grade=96)
(7)在选课SC中,删除学号为“2016010201”、选修课为“网球”的元组。
答案一:SC−πSNo,CNo,Grade(σSNo=2016010201∧CName=网球(SC⋈C))
答案二:SC−πCNo(σCName=网球(C))⋈πSNo=2016010201(SC)
答案二是老师发的参考答案上给的解法,说实话有点巧妙...
(8)查询“信息学院”的学生信息。
σColl=信息学院(S)
(9)查询“外语学院”,并且年龄小于等于16岁或者大于22岁的学生信息。
σColl=外语学院∧(SAge≤16∨SAge>22)(S)
(10)查询学生的姓名和所在学院。
πSName,Coll(S)
(11)查询“信息学院”的学生的学号和姓名。
πSNo,SName(σColl=信息学院(S))
(12)查询“软件学院”,并且年龄小于等于16或者大于22岁的学生的姓名、性别和年龄。
πSName,SSex,SAge(σColl=软件学院∧(SAge≤16∨SAge>22)(S))
(13)查询选修了课程的学生的学号。
πSNo(SC)
(14)查询年龄在19 ~ 22岁(包括19岁和22岁)之间的学生的姓名、性别和年龄。
πSName,SSex,SAge(σSAge≥19∧SAge≤22(S))
(15)查询外语学院、数学学院和工商学院学生的姓名和性别。
πSName,SSex(σColl=外语学院∨Coll=数学学院∨Coll=工商学院(S))
(16)查询至少选修了课程号分别为:020101、030102和060206三门课程的学生的学号。
令 T={(CNo=020101),(CNo=030102),(CNo=060206)}
则所求结果为 πSNo(SC÷T)
(17)查询选修课程号为020101或者030102或者060206的课程的学生的学号。
πSNo(σCNo=020101∨CNo=030102∨CNo=060206(SC))
(18)查询只选修课程号分别为:020101、030102和060206三门课程的学生的学号。
先求至少选了这三名课学生的学号:
令 T=(CNo=020101),(CNo=030102),(CNo=060206)
X=πSNo(SC÷T)
再求有这三门课之外的选课记录的学生的学号:
Y=πSNo(σCNo=020101∧CNo=030102∧CNo=060206(SC))
则题目所求为 X−Y
(19)查询选修了“数据库原理”课程的男生的学号和姓名。
πSNo,SName(σCName=数据库原理∧SSex=男(SC⋈C⋈S))
(20)查询至少选修了一门课程其先修课的课程号为2016010201的学生的姓名。
πSName(SC⋈S⋈σCPNo=2016010201(C))