习题 3
1. 简答题
1)SELECT语句如何实现投影操作?如何实现选择操作?
2)试述二个表之间的自然连接操作工作原理,要实现二表之间的自然连接对二个表有什么要求?如何将二表之间的自然连接扩展到多个表导航查询?
2. SQL编写题
1)假设图书管理数据库中有4个表:图书分类、图书、借阅和读者。
它们的模式及表结构分别如下:
读者表(证件号(文本,10),姓名(文本,10),单位(文本,200))
借阅表(证件号(文本,10),条码号(文本,8),借书日期(日期时间),还书日期D (日期时间),超期天数(数值)、财产号(文本,50)、借书经手人(文本,50)、借书地(文本,50)、还书经手人(文本,50)还书地(文本,50)、借阅规则(文本,50)、借阅方式(文本,50)
图书条码表(条码号(文本,8),索书号(文本,18),入库时间(日期时间))
图书表(索书号(文本,18),题名(文本,50),作者(文本,20),出版社(文本,20),价格(数值(7,2)),出版年份(日期时间)
(1)试标示出各表的主键字段名称,画出表之间的约束关系和约束字段名称。
解:读者表.证件号是主键,借阅表.证件号是外键;图书条码表.条码号是主键,借阅表.条码号是外键;图书表.索书号是主键,图书条码表.索书号是外键。
(2)解释WHERE子句中的"借阅表.借书证号=读者表.借书证号"对应的关系操作含义。
解:借阅表.借书证号是主键,读者表.借书证号为外键,为此,WHERE子句中的"借阅表.借书证号=读者表.借书证号"对应的关系操作含义为参考完整性约束。
(3)求“铁道出版社”的所有图书名称和价格。
解:Select 题名,价格
From 图书表
Where 出版社=”铁道出版社”
(4)求工作单位为“信息管理学院”的读者姓名。
解:select 姓名
From 读者表
Where 单位=”信息管理学院”
(5)按出版社名称,求各出版社出版的图书数量。
解:select 出版社,count(*)
From 图书表
Group by 出版社
(6)求所有包含“人民”二字的图书名称、出版社名和价格。
解:select 题名,出版社,价格
From 图书表
Where 题名like “*人民*”
(7)求读者“李默”所借阅图书的所属出版社(去除重复的记录)。
解:select distinct 出版社
From 读者表,借阅表,图书条码表,图书表
Where 读者表.证件号=借阅表.证件号
And 借阅表.条码号=图书条码表.条码号
And图书条码表.索书号=图书表.索书号
And 姓名=”李默”
(8)求在2010年7月间所有借阅图书名称和单价。
解:select 题名,价格
From 图书表,借阅表,图书条码表
Where借阅表.条码号=图书条码表.条码号
And图书条码表.索书号=图书表.索书号
And 借书时间>=#2010-07-01#
And借书时间<=#2010-07-31#
(9)求作者“魏超”的图书为哪些读者和工作单位所借阅。
解:select 姓名,单位
From读者表,借阅表,图书条码表,图书表
Where 读者表.证件号=借阅表.证件号
And 借阅表.条码号=图书条码表.条码号
And图书条码表.索书号=图书表.索书号
And 作者=”魏超”
(10)求题名称为“自动化”的所有图书为哪些单位借阅(去除重复的记录)。
解:select distinct 单位
From读者表,借阅表,图书条码表,图书表
Where 读者表.证件号=借阅表.证件号
And 借阅表.条码号=图书条码表.条码号
And图书条码表.索书号=图书表.索书号
And 题名=”自动化”
(11)求图书“网络广告”为哪些读者借阅。
解:select 姓名
From读者表,借阅表,图书条码表,图书表
Where 读者表.证件号=借阅表.证件号
And 借阅表.条码号=图书条码表.条码号
And图书条码表.索书号=图书表.索书号
And 题名=”网络广告”
(12)求图书“网络广告”为哪些单位借阅(去除重复的记录)。
解:select distinct 单位
From读者表,借阅表,图书条码表,图书表
Where 读者表.证件号=借阅表.证件号
And 借阅表.条码号=图书条码表.条码号
And图书条码表.索书号=图书表.索书号
And 题名=”网络广告”
(13)按出版社分类求各出版社出版图书数量。
解:select 出版社,count(*)
From 图书表
Group by 出版社
(14)用insert语句插入一个读者信息:09626,孙强,力学所。
解:insert into 读者表
Values (“09626”,”孙强”,”力学所”)
(15)用delete语句删除证件号为04375的读者。
解:delete *
From 读者表
Where 证件号=”04375”
(16)用update将索书号为“T”开头的书单价增加20%。
解:update 图书表
Set 价格=价格*1.2
Where 索书号like “T*”
(17
解:transform count(题名) as AA
Select 出版社,count(题名) as 总册数
From读者表,借阅表,图书条码表,图书表
Where 读者表.证件号=借阅表.证件号
And 借阅表.条码号=图书条码表.条码号
And图书条码表.索书号=图书表.索书号
Group by 出版社
Pivot 单位
2)试编写基于“产品销售数据库”的数据检索语句。
数据库模式如下图所示,试完成下列操作。
(1)试标示出各表的主键字段名称,画出表之间的约束关系和约束字段名称。
解:客户表:ID 运营商:ID 产品:ID 员工:ID
订单表:订单ID 订单明细:ID
订单表是客户表、运营商表、员工表的外键
订单明细表是订单表、产品表的外键
(2)请显示“客户”表所有姓“古”的顾客姓、名和公司名称。
解:select 姓氏,名字,公司
From 客户
Where姓氏like “古*”
(3)请查找“产品”表“列出价格”在1000到1500元的产品代码和产品名称。
Select 产品代码,产品名称
From 产品
Where列出价格between 1000 and 1500
(4)请查找“分派日期”在2010年07月01日到2010年07月31日之间所有的产品代码、产品名称、分派日期和数量明细列表。
Select 产品代码,产品名称,分派的日期,数量
From订单明细a, 产品b
Where a. 产品ID=b. ID and
分派的日期between #2010/0701# and #2010/07/31#
(5)请统计“分派日期”在2010年07月01日到2010年07月31日之间所有产品号为“0012”的数量之和。
Select sum(数量)
From 订单明细
Where 产品ID=”0012” and分派的日期between #2010/0701# and #2010/07/31#
(6)已知客户ID号为“8867”,求其所购买的所有产品名称。
Select 产品名称
From 订单a, 订单明细b, 产品c
Where a.订单ID=b.订单ID and b.产品ID=d.ID and 客户ID=”8867”
(7)已知客户ID号为“8867”,求其“分派日期”在2010年07月01日到2010年07月31日之间所购买的金额。
Select sum(数量*单价*折扣)
From订单a, 订单明细b
Where a.订单ID=b.订单ID and 客户ID=”8867” and
分派的日期between #2010/0701# and #2010/07/31#
(8)插入一条记录到“产品”表中,记录内容自行定义。
Insert into 产品values(“1111”,”1000”,”p999”,”计算机”,null,3000,3800,
Null,null,50,null,10,null,null)
(9)删除“订单明细”表中,产品号包含“P001”的所有记录。
Delete from订单明细
Where 产品ID like “*P001*”
(10)更新产品ID号为包含“001”的所有产品折扣为0.65。
Update 订单明细
Set 折扣=0.65
Where 产品ID like “*001*”。