实验4 SQL语句——复杂查询及数据更新

一、课程名称: 数据库原理

二、实验名称:实验4 SQL语句——复杂查询及数据更新

三、实验地点与实验环境:

装有MySQLPC机。

四、实验内容

数据查询:

1. 查询在200411日之前借书读者的编号、书名、借阅日期的信息。           

2. 查询借阅了“应用文写作”这本书的读者的编号、姓名。

3. 使用子查询求其它类别中比管理类图书总藏书量都少的类别、书名、总藏书量。   

4. 使用子查询in:找出借阅了1001号书的读者姓名,单位。

5. 使用相关子查询找出借了两本书的读者编号,姓名,单位。

6. 使用相关子查询找出每个出版社价格最贵的图书书名、出版社、价格信息。

7. 用相关子查询exists:找出没有借过书的读者编号及姓名。

数据更新:

8. 将管理类的书籍提价10%

9. 1009号读者的单位改为“计算机学院”。

10. 添加读者信息,读者编号:1022,姓名:李思思,单位:信息学院,性别:女。

11. 1022号读者信息删除。

12. 1008号读者在201235号下午420分借了1002号图书1本,假设此图书的库存足够,请用SQL语句完成上述借书操作。

13. 1010号读者在2001526日上午950分归还借阅的1005号图书1本,请用SQL语句完成上述还书操作。

五、实验步骤、结果或结论:

1. 查询在200411日之前借书读者的编号、书名、借阅日期的信息。

select reader_number,book_name,borrow_time

from borrow_book,book

where borrow_book.book_number=book.book_number AND

borrow_time <"2004.01.01";

select reader_number,book_name,borrow_time

FROM borrow_book natural join book

WHERE borrow_time<'2004-01-01';

2. 查询借阅了“应用文写作”这本书的读者的编号、姓名。

select reader.reader_number,name

from book,borrow_book,reader

where reader.reader_number=borrow_book.reader_number AND

      borrow_book.book_number=book.book_number AND

      book_name='应用文写作';

SELECT  reader.reader_number,name
FROM   borrow_book natural join book natural join reader
WHERE  book_name='应用文写作';

 

3. 使用子查询求其它类别中比管理类图书总藏书量都少的类别、书名、总藏书量。   

select category,book_name,book_total

from book

where book_total<ALL(select book_total

                   from book

                   where category='管理')

AND category!='管理';

select category,book_name,book_total

from book

where book_total<(select MIN(book_total)

                   from book

                   where category='管理')

AND category!='管理';

4. 使用子查询in:找出借阅了1001号书的读者姓名,单位。

select name,department

from reader

where reader_number in(select reader_number

                     from borrow_book

                     where book_number='1001');

5. 使用相关子查询找出借了两本书的读者编号,姓名,单位。

select reader_number,name,department

from reader

where reader_number in (select reader_number

                   from borrow_book

                   group by reader_number

                   having count(*)=2);

SELECT  reader_number,name,department

FROM  reader

WHERE (SELECT COUNT(reader_number)

       FROM  borrow_book

       WHERE  reader.reader_number=borrow_book.reader_number)=2;

6. 使用相关子查询找出每个出版社价格最贵的图书书名、出版社、价格信息。

select book_name,publisher,price

from book x

where price = (select MAX(price)

              from book y

              where y.publisher = x.publisher);     

7. 用相关子查询exists:找出没有借过书的读者编号及姓名。

select reader_number,name

from reader

where not exists(select *

              from borrow_book

              where reader.reader_number=borrow_book.reader_number);

更新前

8. 将管理类的书籍提价10%

update book

set price=price*1.1

where category='管理';

9. 1009号读者的单位改为“计算机学院”。

update reader

set department = '计算机学院'

where reader_number='1009';

10. 添加读者信息,读者编号:1022,姓名:李思思,单位:信息学院,性别:女。

insert into reader (reader_number,name,department,gender)

values ('1022', '李思思', '信息学院', '');

11. 1022号读者信息删除。

delete from reader

where reader_number='1022';

12. 1008号读者在201235号下午420分借了1002号图书1本,假设此图书的库存足够,请用SQL语句完成上述借书操作。

(1)添加借阅记录

insert into borrow_book

values('1008','1002','2012-03-05-16:20');

(2)更新库存

update book

set inventory=inventory-1

where book_number='1002';

13. 1010号读者在2001526日上午950分归还借阅的1005号图书1本,请用SQL语句完成上述还书操作。

(1)更新库存

update book

set inventory=inventory+1

where book_number='1005';

(2)删除借阅记录

DELETE from borrow_book

WHERE book_number='1005' AND reader_number='1010';

(3)添加已还记录

insert into return_book

values('1010','1005','2001-05-26 09:50');

图书管理系统其实是一个很复杂的信息管理系统,它包括很多分类、检索等方面的内容。因为其复杂性,建立这样一个系统更加能体现出运用SQL Server数据库进行数据处理的优越性。本课题将实现一个简化的图书管理系统的功能。 1.系统功能设计 (1)信息录入功能 1)加新图书信息。当图书馆收藏新图书时,系统向用户提供新图书信息录入功能,由于同一种书可能会有多本,因此,新图书的信息有两类:某一个ISBN类别的图书信息,包括:ISBN书号、图书类别、书名、作者、出版社、出版日期、价格、馆藏数量、可借数量、图书简介;另一个具体到每一本书的信息,包括:ISBN书号、图书书号、是否可借。每一个ISBN书号和同一个ISBN书号的多本书之间是一对多的关系,每一本书的图书书号是唯一的。 2)读者信息。用于登记新读者信息。包括:借书证号、姓名、性别、身份证号、职称、可借数量、已借数量、工作部门、联系电话等。 3)借阅信息。用于登记读者借阅情况信息。包括:借书证号、借阅书号、借出日期、借阅期限、归还日期等信息。归还日期为空值示该图书未归还。 (2)数据修改和删除功能 1)修改和删除图书信息。图书被借出时,系统需要更新图书信息的可借数量,当可借数量为0时,示该图书都已被借出。当输入的图书信息有错误或需要进行必要更新时,可以修改图书信息;当一种图书所有馆藏图书都已损毁或遗失并且不能重新买到时,该图书信息需要删除。 2)修改和删除读者信息。当读者的自身信息发生变动,如部门间调动或调离本单位,或违反图书馆规定需要限制其可借阅图书数量时,需要修改读者信息。 3)还书处理。读者归还图书时,更新图书借阅信息中的归还日期,读者信息中的已借数量及ISBN类别信息中该图书的可借数量。 (3)查询和统计功能 1)图书查询功能。根据图书的各种已知件来查询图书的详细信息,如书名、作者、出版社、ISBN书号等支持模糊查询。 2)读者信息查询。输入读者的借书证号、姓名、工作部门等信息,查询读者的基本信息。对查询到的每一个读者,能够显示其未归还的图书编号和书名。 3)查询所有到期未归还的图书信息。要求结果显示图书编号、书名、读者姓名、借书证号码、借出日期等信息。 4)统计指定读者一段时间内的某类图书或所有类别图书借阅次数及借阅总次数。 2.数据的创建 根据功能要求的说明创建下列数据: (1)图书ISBN类别信息 图书ISBN类别信息包括以下字段: ISBN书号、图书类别、书名、作者、出版社、出版日期、价格、馆藏数量、可借数量、图书简介。 (2)图书信息 图书信息包括以下字段: ISBN书号、图书书号、是否可借。 (3)读者信息 读者信息包括以下字段: 借书证号、姓名、性别、出生年月、身份证号、职称、可借数量、已借数量、工作部门、家庭地址、联系电话。 (4借阅信息图书-读者关系) 借阅信息包括以下字段: 借书证号、借阅书号、借出日期、借阅期限、归还日期。 3.数据库完整性设计 设计者应认真分析和思考各个之间的关系,合理设计和实施数据完整性原则。 1) 给每个实施主键及外键约束。 2) 设定缺省约束。如性别。 3) 设置非空约束如图书信息中的书名。 4) 实施CHECK约束。如ISBN类别中的可借数量小于馆藏数量。 5) 实施规则。如身份证号码必须为15为或18位。 4.SQL Server数据库对象设计 1)设计一个存储过程,以图书编号为输入参数,返回借阅图书但未归还的读者姓名和借书证号。 2)读者资料查询:设计一个有多个输入参数的存储过程,返回读者的详细信息。设计另一存储过程并以读者借书证号为输入参数,返回该读者未归还的图书名称和图书编号。 3)到期图书查询:设计一个视图,返回所有逾期未归还的图书编号、书名、读者姓名等信息。 4)统计图书借阅次数:设计一个以两个日期作为输入参数的存储过程,计算这一段时间内各类别图书借阅的次数,返回图书类别、借阅次数的信息。 5)加快数据检索速度,用图书编号图书信息建立索引。 6)为读者信息创建一个删除触发器,当一个读者调出本单位时,将此读者的资料从读者信息中删除。注意实施业务规则:有借阅书的读者不得从读者信息中删除。 7)借阅处理:为借阅信息设计INSERT触发器,在读者借阅时更改ISBN类别信息,且可借数量减1,图书信息是否可借列的值变为“不可借”,读者信息中该类读者借阅数加1。 8)还书处理:为借阅信息设计UPDATE触发器,在该的归还日期列被更改后,将图书信息的是否可借列的值变为“可借”,读者信息中已借数量减1及ISBN类别信息中可借数量加1。
一、实验目的 1.掌握SQL Server 2005的安装。 2.掌握SQL Server Management Studio的启动和使用。 3.掌握SQL Server 2005服务器的配置和注册。 4.掌握SQL Server 2005查询的基本使用。 5.掌握应用SQL Server Management Studio创建数据库的方法。 6.掌握应用SQL Server Management Studio修改和查看数据库的方法。 7.掌握应用SQL Server Management Studio删除数据库的方法。 8.掌握应用Transact-SQL语句创建数据库的方法。 9.掌握应用Transact-SQL修改和查看数据库的方法。 10.掌握通过Transact-SQL删除数据库的方法。 11.掌握SQL Server 2005数据库和操作系统物理文件的关系。 12.掌握数据库的分离和附加方法。 二、实验内容 1.完成SQL Server 2005开发版的安装。 提示:若计算机系统中已经安装有SQL Server 2005系统,则在安装时需要选择安装命名实例。安装过程中身份验证模式选择“混合模式”并设置sa账户的密码。 2.利用SQL Server配置管理器启动、停止SQL Server服务(包括默认实例和命名实例),配置SQL Server服务为自动启动。 3.利用SQL Server配置管理器配置进行SQL Server 2005网络配置,启用默认实例和命名实例的TCP/IP协议。 4.利用SQL Server外围配置器配置数据库引擎的服务及远程连接,设置为“本地连接和远程连接”,选择“同时使用TCP/IP和named pipes”。 5.利用SQL Server Management Studio注册安装的命名实例。 6.利用SQL Server Management Studio注册远程服务器。 提示:注册远程服务器时需要使用混合验证模式,利用sa账户和密码登录远程服务器。 7.启动SQL Server Management Studio,连接到服务器。新建一个查询,在其中输入如下代码: DECLARE @position int, @string char(5) SET @position = 1 SET @string = 'China' WHILE @position <= DATALENGTH(@string) BEGIN SELECT SUBSTRING(@string, @position, 1) 字符, ASCII(SUBSTRING(@string, @position, 1)) ASCII码 SET @position = @position + 1 END
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值