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


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

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


装有MySQL的PC机。


四、实验内容

数据查询:

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

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

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

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

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

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

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


数据更新:

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

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

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

11. 将1022号读者信息删除。

12. 1008号读者在2012年3月5号下午4点20分借了1002号图书1本,假设此图书的库存足够,请用SQL语句完成上述借书操作。

13. 1010号读者在2001年5月26日上午9点50分归还借阅的1005号图书1本,请用SQL语句完成上述还书操作。






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

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

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';

mysql 复合查询的结果作为条件 sql复合查询和更新_数据库

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='应用文写作';

 

mysql 复合查询的结果作为条件 sql复合查询和更新_mysql 复合查询的结果作为条件_02

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!='管理';

mysql 复合查询的结果作为条件 sql复合查询和更新_SQL_03

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

select name,department

from reader

where reader_number in(select reader_number

                     from borrow_book

                     where book_number='1001');

mysql 复合查询的结果作为条件 sql复合查询和更新_子查询_04

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;

mysql 复合查询的结果作为条件 sql复合查询和更新_mysql_05

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

select book_name,publisher,price

from book x

where price = (select MAX(price)

              from book y

              where y.publisher = x.publisher);     

mysql 复合查询的结果作为条件 sql复合查询和更新_mysql_06

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

select reader_number,name

from reader

where not exists(select *

              from borrow_book

              where reader.reader_number=borrow_book.reader_number);

mysql 复合查询的结果作为条件 sql复合查询和更新_子查询_07

更新前

mysql 复合查询的结果作为条件 sql复合查询和更新_子查询_08


mysql 复合查询的结果作为条件 sql复合查询和更新_mysql 复合查询的结果作为条件_09

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

update book

set price=price*1.1

where category='管理';

mysql 复合查询的结果作为条件 sql复合查询和更新_子查询_10

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

update reader

set department = '计算机学院'

where reader_number='1009';

mysql 复合查询的结果作为条件 sql复合查询和更新_mysql_11

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

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

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

mysql 复合查询的结果作为条件 sql复合查询和更新_SQL_12

11. 将1022号读者信息删除。

delete from reader

where reader_number='1022';

mysql 复合查询的结果作为条件 sql复合查询和更新_子查询_13




12. 1008号读者在2012年3月5号下午4点20分借了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';

mysql 复合查询的结果作为条件 sql复合查询和更新_mysql 复合查询的结果作为条件_14

mysql 复合查询的结果作为条件 sql复合查询和更新_数据库_15


13. 1010号读者在2001年5月26日上午9点50分归还借阅的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');


mysql 复合查询的结果作为条件 sql复合查询和更新_mysql 复合查询的结果作为条件_16


mysql 复合查询的结果作为条件 sql复合查询和更新_子查询_17