1 目的
1、理解SQL的特点;
2、掌握SELECT命令的使用;
3、掌握单表查询、连接查询、嵌套查询和集合查询;
4、掌握INSERT、UPDATE和DELETE命令的使用;
5、掌握将SQL命令嵌入到C#或其他高级语言;
2 要点
1、单表查询、连接查询、嵌套查询和集合查询;
2、数据更新:INSERT、UPDATE、DELETE命令;
3 内容
针对简易图书管理数据库BooksDB,用SQL命令完成下述功能:
1、单表查询
(1) 查询所有读者的编号和姓名;
(2) 查询所有读者的编号、姓名和单位,要求修改查询结果的列名;
(3)查询 Reader 表的全部列
(4) 查询借阅过图书的读者的编号;
(5)查询单价大于 30 元的图书的书号和书名;
(6)查询单价不在 30 至 40 元之间的图书的书号、书名和作者;
(7) 查询既不是管理学院、也不是物理学院的读者的姓名和 QQ;
(8)查询所有姓“王”的读者的姓名、单位和 QQ;
(9)查询所有不姓“王”的读者的姓名、单位和 QQ;
(10)查询所有全名只有两个字的读者的姓名、单位和 QQ;
(11)查询所有图书还未归还的借阅信息;
(12)查询借阅了书号“bk2017001”的读者的编号和借书日期, 查询结果按借书日期降序排列;
(13)查询读者的总人数;
(14)查询借阅过图书的读者人数;
(15)查询所有图书的最高单价;
(16)查询各单位名及该单位的读者人数;
(17)查询读者人数大于 40 的单位名及该单位的读者人数;
2、连接查询
(18)查询类别号为 1 的所有读者的姓名和单位;
(19)查询管理学院所有读者的编号、姓名和可借书数量;
(20)查询借阅了书号“bk2017001”的读者的姓名、可借书数量和可借书天数;
(21)查询每个读者及其借阅信息的情况(即使没有借过书,也列出该读者的基本信息);
3、嵌套查询
(22)查询与连晓燕在同一个单位的读者;
(23)查询借阅了书名为“高等数学”的读者的编号和姓名;
(24)查询所有没借阅过书号为“bk2017004”的读者姓名;
4、集合查询
(25)查询管理学院的读者及借书本数小于 4 的读者;
(26)查询管理学院借书本数小于 4 的读者;
(27)查询管理学院借书本数大于 4 的读者;
5、数据更新
(28)将一个新读者记录(读者编号:2017007;类别:1, 姓名:卢小川,单位:计算机科学学
院,QQ:932200777, 已借书数量:0)插入 Reader 表中
(29)插入一条借阅记录(读者编号:2017007, 书号:bk2017004, 借书日期:2017-3-8)插入
Borrow 表中;
(30)将读者 rd2017001 的 QQ 号修改为:3635752;
(31)将读者 rd2017001 的类别号修改为 2;
(32)删除所有的借阅记录;
4 详细步骤和命令
4.1、单表查询
(1) 查询所有读者的编号和姓名:
Select rdId , rdName from Reader
运行结果:
(2)查询所有读者的编号、姓名和单位,要求修改查询结果的列名:
select rdID as 编号,rdName 姓名,rdDept 单位 from Reader
运行结果:
(3)查询Reader表的全部列:
select * from Reader
运行结果:
(4)查询借阅过图书的读者的编号:
select rdID from Reader where rdBorrowQty >0
运行结果:
(5)查询单价大于30元的图书的书号和书名:
select bkID , bkName from Bookwhere bkPrice>30
运行结果:
(6)查询单价不在30至40元之间的图书的书号、书名和作者:
select bkID , bkName ,bkAuthor from Bookwhere bkPrice not between 30 and 40
运行结果:
(7) 查询既不是管理学院、也不是物理学院的读者的姓名和QQ:
select rdName , rdQQ from Reader where rdDept not in('管理学院','物理学院')
运行结果:
(8)查询所有姓“王”的读者的姓名、单位和QQ:
select rdName , rdDept , rdQQ from Readerwhere rdName like '王%'
运行结果:
(9)查询所有不姓“王”的读者的姓名、单位和QQ:
select rdName , rdDept , rdQQ from Readerwhere rdName not like '王%'
运行结果:
(10)查询所有全名只有两个字的读者的姓名、单位和QQ:
select rdName , rdDept , rdQQ from Readerwhere rdName like '__'
运行结果:
(11)查询所有图书还未归还的借阅信息:
select * from Borrow where DateLendAct is Null
运行结果:
(12)查询借阅了书号“bk2017001”的读者的编号和借书日期, 查询结果按借书日期降序排列:
select rdID , DateBorrow from Borroworder by Dateborrow desc
运行结果:
(13)查询读者的总人数:
select count(*) from Reader
运行结果:
(14)查询借阅过图书的读者人数:
select count(distinct rdID) from Borrow
(15)查询所有图书的最高单价:
select max(bkPrice)from Book
运行结果:
(16)查询各单位名及该单位的读者人数:
select rdDept , count(rdID) from Reader group by rdDept
运行结果:
(17)查询读者人数大于40的单位名及该单位的读者人数:
select rdID from Reader group by rdID having count(*)>40
4.2 连接查询
(18)查询类别号为1的所有读者的姓名和单位:
select rdName ,rdDept from Reader where rdType='1'
运行结果:
(19)查询管理学院所有读者的编号、姓名和可借书数量:
select rdID ,rdName ,canLendQty from Reader,ReaderTypewhere Reader.rdType=ReaderType.rdType and rdDept='管理学院'
运行结果:
(20)查询借阅了书号“bk2017001”的读者的姓名、可借书数量和可借书天数:
select rdName ,canLendQty ,canLendDay from Reader ,ReaderType,Borrowwhere Reader.rdID=Borrow.rdID and Reader.rdType=ReaderType.rdType and bkID='bk2017001'
运行结果:
(21)查询每个读者及其借阅信息的情况(即使没有借过书,也列出该读者的基本信息):
select Reader.rdID ,rdType , rdName , rdDept , rdQQ , rdBorrowQty , bkID , DateBorrow , DateLendPlan , DateLendActfrom Reader left join Borrow on Reader.rdID = Borrow.rdID
运行结果:
4.3 嵌套查询
(22)查询与连晓燕在同一个单位的读者:
select * from Readerwhere rdDept in (select rdDept from Reader where rdName='连晓燕')
运行结果:
(23)查询借阅了书名为“高等数学”的读者的编号和姓名:
select rdID ,rdName from Readerwhere rdID in (select rdID from Borrow where bkID in(select bkID from Book where bkName = '高等数学' ) )
运行结果:
(24)查询所有没借阅过书号为“bk2017004”的读者姓名:
select rdName from Readerwhere rdID not in (select rdID from Borrow where bkID='bk2017004')
运行结果:
4.4 集合查询
(25)查询管理学院的读者及借书本数小于4的读者:
select * from Readerwhere rdDept='管理学院'
unionselect * from Reader where rdBorrowQty<4
运行结果:
(26)查询管理学院借书本数小于4的读者:
select * from Readerwhere rdDept='管理学院'
intersectselect * from Reader where rdBorrowQty<4
运行结果:
(27)查询管理学院借书本数大于4的读者:
select * from Readerwhere rdDept='管理学院'
intersectselect * from Reader where rdBorrowQty>4
运行结果:
4.5 数据更新
(28)将一个新读者记录(读者编号:2017007;类别:1, 姓名:卢小川,单位:计算机科学学院,QQ:932200777, 已借书数量:0)插入Reader表中:
insert into Reader values ('rd2017007','1','卢小川','计算机科学学院','932200777','0')
(29)插入一条借阅记录(读者编号:2017007, 书号:bk2017004, 借书日期:2017-3-8)插入Borrow表中:
insert into Borrow values ('rd2017007','bk2017004','2017-03-08','','')
(30)将读者rd2017001的QQ号修改为:3635752:
update Readerset rdQQ=3635752
where rdID='rd2017001'
(31)将读者rd2017001的类别号修改为2:
update Reader set rdType=2
where rdID='rd2017001'
(32)删除所有的借阅记录:
delete from Borrow
运行结果:
执行上述命令后在查看Borrow表,得到的结果是没有任何一列有数据,如下图: