实验2SQL语言.docx
《实验2SQL语言.docx》由会员分享,可在线阅读,更多相关《实验2SQL语言.docx(19页珍藏版)》请在冰豆网上搜索。
实验2SQL语言
北华航天工业学院
《数据库原理与应用》
实验报告
报告题目:
SQL语言
作者所在院系:
计算机与遥感信息技术学院
作者所在专业:
软件工程
作者学号:
2015405A607
作者姓名:
武俊其
指导教师姓名:
张春娥
完成时间:
2016.11.2
北华航天工业学院教务处制
SQL语言
一、实验目的
1、理解数据库以及数据表的设计;
2、熟悉SQLServer2008中的数据类型;
3、熟悉使用SQL语句创建和删除模式和索引;
4、掌握使用SQL语句创建、修改和删除数据表;
5、掌握使用SQL语句查询表中的数据;
6、掌握使用SQL语句插入、修改和删除数据表中的数据;
7、掌握使用SQL语句创建、删除、查询和更新视图。
二、实验内容
(一)创建数据库和模式
1、通过SQL语句创建图书信息管理数据库,命名为“db_Library”,数据文件和日志文件放在D盘下以自己学号和姓名命名的文件夹中,数据文件的逻辑名为db_Library_data,数据文件的物理名为db_Library_data.mdf,文件初始大小为10MB,最大可增加至300MB,增幅为10%;日志文件的逻辑名为db_Library_log,日志文件的物理名为db_Library_data.ldf,文件初始大小为5MB,最大可增加至200MB,增幅为2MB。
(参照SQLServer2008联机丛书)
2、通过SQL语句在该数据库中创建模式L_C。
(二)创建和管理数据表
要求为各数据表的字段选择合适的数据类型及名称;为各数据表设置相应的完整性约束条件。
1、通过SQL语句将以下数据表创建在L_C模式下:
课程信息表(tb_course)——课程编号、课程名、先修课、学分
2、通过SQL语句将以下数据表创建在该数据库的默认模式dbo下:
图书类别信息表(tb_booktype)——类别编号、类别名称
图书信息表(tb_book)——图书编号、类别编号、书名、作者、出版社、定价、库存数
读者信息表(tb_reader)——读者编号、姓名、性别、学号、班级、系部
借阅信息表(tb_borrow)——图书编号、读者编号、借阅日期、归还日期
3、通过SQL语句对读者信息表进行修改:
删除系部字段、添加所在系字段。
4、通过SQL语句对图书信息表进行修改:
将定价的数据类型改为REAL。
5、通过SQL语句删除课程信息表。
(三)创建和删除索引
1、使用SQL语句在图书信息表上创建一个非聚簇索引IX_S_QUANTITY,要求按照该表中库存数字段的降序创建。
2、使用SQL语句在读者信息表上创建一个唯一的非聚簇索引IX_S_NAME,要求按照该表中的姓名字段的升序创建。
3、使用SQL语句删除之前创建的两个索引。
(四)数据库及数据表设计
根据周围的实际应用情况,自选一个小型的数据库应用项目进行研究,完成该系统的设计。
通过需求分析,列出系统的主要功能,并完成该系统数据库的逻辑结构设计。
例如可选择学籍管理系统、企业进销存管理系统、人事管理系统或在线考试系统等。
(五)数据查询
通过SSMS向各数据表中添加以下记录。
(1)图书类别信息表
类别编号
类别名称
类别编号
类别名称
类别编号
类别名称
1
数学
4
文学
7
建筑
2
英语
5
艺术
8
化学
3
计算机
6
电子信息
9
物理
(2)图书信息表
图书编号
类别编号
书名
作者
出版社
定价
库存数
10001
3
数据库管理
王珊
高等教育出版社
35.50
10
10002
3
软件测试
贺平
机械工业出版社
24.60
5
10003
3
C++程序设计
谭浩强
清华大学出版社
30.00
8
10004
4
红楼梦
曹雪芹
人民文学出版社
70.00
5
10005
4
西游记
罗贯中
人民文学出版社
60.00
8
10006
4
红与黑
司汤达
人民文学出版社
50.00
5
10007
1
高等数学
李翼
清华大学出版社
28.00
4
10008
8
有机化学
张翔
高等教育出版社
29.00
5
10009
2
大学英语
王琳
高等教育出版社
25.00
10
10010
2
英语教程
王琳
高等教育出版社
25.00
5
(3)读者信息表
读者编号
姓名
性别
学号
班级
所在系
R10001
张小航
男
1351101
13511
计算机系
R10002
王文广
女
1351102
13511
计算机系
R10003
李理
女
1351103
13511
计算机系
R10004
李彦宏
男
1351201
13512
计算机系
R10005
张丽霞
女
1351202
13512
计算机系
R10006
王强
男
1221104
12211
电子系
R10007
张宝田
男
1221204
12212
电子系
R10008
宋文霞
女
1261104
12611
建工系
R10009
刘芳菲
女
1381104
13811
外语系
R10010
常江宁
男
1381204
13812
外语系
(4)借阅信息表
图书编号
读者编号
借阅日期
归还日期
10002
R10003
2014-9-20
2014-10-20
10003
R10003
2014-9-20
2014-10-20
10004
R10003
2014-9-30
2014-10-30
10009
R10003
2014-9-30
2014-10-30
10009
R10007
2014-5-20
2014-6-20
10010
R10007
2014-5-20
2014-6-20
10009
R10009
2014-5-30
2014-6-30
10010
R10009
2014-5-22
2014-6-22
10002
R10009
2014-5-22
2014-6-22
10003
R10009
2014-5-30
2014-6-30
对以上数据表,完成以下操作:
(1)查询每本图书的所有信息;
(2)查询每个读者的读者编号、姓名和班级;
(3)查询每条借阅记录的借阅天数(函数DATEDIFF获取两个日期的差);
(4)查询被借阅过的图书的图书编号;
(5)查询图书编号为“10006”的书名和作者;
(6)查询库存数在5到10本之间的图书的图书编号和书名;
(7)查询计算机系或电子系姓张的读者信息;
(8)查询书名包括“英语”的图书信息;
(9)统计男读者、女读者的人数;
(10)统计各类图书的类别编号、平均定价以及库存总数;
(11)统计每本书籍借阅的人数,要求输出图书编号和所借人数,查询结果按人数降序排列;
(12)查询有库存的各类别图书的类别编号、类别名称和借阅数量;
(13)查询借阅了“大学英语”一书的读者,输出读者姓名、性别、系部;
(14)查询每个读者的读者编号、姓名、所借图书编号以及所借阅日期;(LEFTOUTERJOIN)
(15)查询现有图书中价格最高的图书,输出书名、作者、定价;
(16)查询借阅了“大学英语”但没有借阅“C++程序设计”的读者,输出读者姓名、性别、系部;
(17)统计借阅了2本以上图书的读者信息;
(18)查询借阅了“大学英语”一书或者借阅了“C++程序设计”一书的读者信息;(用集合查询完成)
(19)查询既借阅了“大学英语”一书又借阅了“C++程序设计”一书的读者信息;(用集合查询完成)
(20)查询计算机系中比其他系所有读者借书数量都多的读者的信息;
(21)在读者信息表中插入一条新的记录(读者编号:
R10011;姓名:
张三;所在系:
电子系);
(22)定义一个表tb_bknew,包含图书编号、书名和类别名称字段,要求将类别编号为“3”的图书的图书编号、书名和类别名称插入到tb_bknew表中;
(23)将类别编号为“3”的所有图书的库存数增加5;
(24)将“C++程序设计”这本书的归还日期增加一个月(函数DATEADD)。
(25)删除姓名为“张三”的读者的信息;
(26)删除tb_bknew表中的所有数据;
(27)创建一个名为“读者借阅信息_VIEW”的视图,要求显示计算机系所有读者的借阅信息,包括读者编号、姓名、所在系、图书编号、书名和借阅日期等字段,更新该视图时要保证只有计算机系的读者借阅信息;
(28)创建一个名为“图示借阅信息_VIEW”的视图,要求显示图书的借阅情况,包括图书编号、书名、库存数、借阅次数字段;
(29)查询借阅次数大于2的图书的图书编号、书名、库存数和借阅次数;
(30)删除“图示借阅信息_VIEW”视图。
三、实验步骤
createdatabased_library
on
(name=db_library_data,
filename='d:
2015405A607武俊其\db_library_data.mdf',
size=10,
maxsize=300,
filegrowth=1)
logon
(name=db_library_log,
filename='d:
2015405A607武俊其\db_library_data.ldf',
size=5,
maxsize=200,
filegrowth=2)//创建数据库
createschema"L_C"AUTHORIZATIONWU//创建模式
CREATETABLEtb_course
(
课程编号int,
课程名char(20),
先修课char(20),
学分int
);
CREATETABLEtb_booktype
(
类别编号int,
类别名称char(20)
);
CREATETABLEtb_book
(
图书编号int,
类别编号int,
书名char(20),
作者char(20),
出版社char(20),
定价float,
库存数int
);
CREATETABLEtb_reader
(
读者编号char(20),
姓名char(20),
性别char
(2),
学号int,
班级char(10),
系部char(20)
);
CREATETABLEtb_borrow
(
图书编号int,
读者编号char(20),
借阅日期char(20),
归还日期char(20),
);
go
ALTERTABLEtb_readerDROPCOLUMN系部;//删除系部
ALTERTABLEtb_readerADD所在系CHAR;//添加所在系
LTERTABLEtb_bookALTERCOLUMN定价REAL;//定价的数据类型改为REAL
DROPTABLEtb_courseCASCADE;//删除课程信息表
CREATEUNIQUEINDEXIX_S_QUANTITYONtb_book(库存数);
CREATEUNIQUEINDEXIX_S_NAMEONtb_reader(姓名);//创建索引
DROPINDEXIX_S_QUANTITYONtb_book;
DROPINDEXIX_S_NAMEONtb_reader;//删除索引
1.查询每本图书的所有信息
select*
fromtb_book;
2.查询每个读者的读者编号,姓名和班级
select读者编号,姓名,班级
fromtb_reader;
3.查询每条借阅记录的借阅天数(函数DATEDIFF获取两个日期的差)
selectdatediff(DAY,借阅日期,归还日期)借阅天数
fromtb_borrow
4.查询被借阅过的图书的图书编号
selectdistinct图书编号
fromtb_borrow;
5.查询图书编号为"10006"的书名和作者
select书名,作者
fromtb_book
where图书编号='10006';
6.查询库存数在到本之间的图书的图书编号和书名
select图书编号,书名
fromtb_book
where库存数between5and10;
7.查询计算机系或电子系姓张的读者信息
select*
fromtb_reader
where姓名like'张%'and(所在系='计算机系'or所在系='电子系');
8.查询书名包括"英语"的图书信息
select*
fromtb_book
where书名like'%英语';
9.统计男读者,女读者的人数
select性别,COUNT(*)人数
fromtb_reader
groupby性别;
10.统计各类图书的类别编号,平均定价以及库存总数
select类别编号,AVG(定价)平均定价,sum(库存数)库存总数
fromtb_book
groupby类别编号;
11.统计每本书籍借阅的人数要求输出图书编号和所借人数查询结果按人数降序排列
select图书编号,COUNT(*)所借人数
fromtb_borrow
groupby图书编号
orderbyCOUNT(*)desc;
12.查询有库存的各类别图书的类别编号,类别名称和借阅数量
selecttb_book.类别编号,类别名称,COUNT(*)借阅数量
fromtb_book,tb_booktype,tb_borrow
wheretb_book.类别编号=tb_booktype.类别编号andtb_book.图书编号=tb_borrow.图书编号
groupbytb_book.类别编号,tb_booktype.类别名称;
13.查询借阅了大学英语一书的读者,输出读者姓名,性别,系部
select姓名,性别,所在系
fromtb_reader
where读者编号in
(select读者编号
fromtb_borrow
where图书编号in
(select图书编号
fromtb_book
where书名='大学英语')
)
14.查询每个读者的读者编号,姓名,所借图书编号及所借阅日期
selecttb_reader.读者编号,姓名,借阅日期
fromtb_readerleftouterjointb_borrowontb_reader.读者编号=tb_borrow.读者编号;
15.查询现有图书中价格最高的图书,输出书名,作者,定价
select书名,作者,定价
fromtb_book
where定价=
(selectMAX(定价)
fromtb_book
);
16.查询借阅了大学英语但没有借阅C++程序设计的读者输出读者姓名,性别,系部
select姓名,性别,所在系
fromtb_reader
where姓名in
(select姓名
fromtb_borrow
where图书编号in
(select图书编号
fromtb_book
where书名='大学英语'))
and姓名notin(select姓名
fromtb_borrow
where图书编号in
(select图书编号
fromtb_book
where书名='C++程序设计')
);
17.统计借阅了本以上图书的读者信息
select*
fromtb_reader
where读者编号in
(select读者编号
fromtb_borrow
groupby读者编号
havingCOUNT(*)>2);
18.查询计算机系中比其他系所有读者借书数量都多的读者的信息
select*
fromtb_readertb
where所在系='计算机系'and读者编号in
(selecttb_reader.读者编号
fromtb_reader,tb_borrow
wheretb_reader.读者编号=tb_borrow.读者编号
andtb_reader.读者编号=tb.读者编号
groupbytb_reader.读者编号
havingcount(图书编号)>any
(
selectcount(图书编号)
fromtb_reader,tb_borrow
wheretb_reader.读者编号=tb_borrow.读者编号and所在系<>'计算机系'
groupbytb_reader.读者编号
)
);
19.查询借阅了大学英语一书或者借阅了C++程序设计一书的读者信息用集合查询完成
select*
fromtb_reader
where读者编号in
(selecttb_borrow.图书编号
fromtb_borrow,tb_book
wheretb_borrow.图书编号=tb_book.图书编号and书名='大学英语')
union
select*
fromtb_reader
where读者编号in
(select读者编号
fromtb_borrow,tb_book
wheretb_borrow.图书编号=tb_book.图书编号and书名='C++程序设计')
20.查询既借阅了大学英语一书又借阅了C++程序设计一书的读者信息用集合查询完成
select*
fromtb_reader
where读者编号in(select读者编号
fromtb_borrow,tb_book
wheretb_borrow.图书编号=tb_book.图书编号and书名='大学英语')
intersect
select*
fromtb_reader
where读者编号in
(select读者编号
fromtb_borrow,tb_book
wheretb_borrow.图书编号=tb_book.图书编号and书名='C++程序设计')
21.在读者信息表中插入一条新的记录
insert
intotb_reader(读者编号,姓名,所在系)
values('R10011','张三','电子系');
22.定义一个表tb_booknew,要求将类别编号为"3"的图书的图书编号,书名和类别名称插入到tb_bknew表中
CREATETABLEtb_booknew
(
图书编号int,
书名char(10),
类别名称char(10),
);
insert
intotb_booknew
select图书编号,书名,类别名称
fromtb_book,tb_booktype
wheretb_booktype.类别编号=tb_book.类别编号andtb_book.类别编号='3';
23.将类别编号为的所有图书的库存数增加
updatetb_book
set库存数=库存数+5
where类别编号='3';
24.将"C++程序设计"这本书的归还日期增加一个月
updatetb_borrow
set借阅日期=DATEADD(MONTH,1,归还日期)
where图书编号in
(select图书编号
fromtb_book
where书名='C++程序设计');
25.删除姓名为张三的读者的信息
delete
fromtb_reader
where姓名="张三";
26.删除tb_bknew表中的所有数据
delete
fromtb_booknew;
27.创建一个名为"读者借阅信息_VIEW”的视图
createview读者借阅信息_VIEW
as
selecttb_borrow.读者编号,姓名,所在系,tb_book.图书编号,书名,借阅日期
fromtb_book,tb_reader,tb_borrow
wheretb_book.图书编号=tb_borrow.图书编号
andtb_reader.读者编号=tb_borrow.读者编号
and所在系='计算机系';
28.创建一个名为“图书借阅信息_VIEW”的视图
createview图书借阅信息_VIEW
as
selecttb_book.图书编号,书名,库存数,COUNT(*)借阅次数
fromtb_book,tb_borrow
wheretb_book.图书编号=tb_borrow.图书编号
groupbytb_book.图书编号,书名,库存数;
29.查询借阅次数大于2的图书的图书编号,书名,库存数和借阅次数
select*
from读者借阅信息_VIEW
where借阅次数>2;
30.删除"图示借阅信息_VIEW"视图
dropview图书借阅信息_VIEWcascade;
四.实验总结
1.通过本章学习,创建数据库,创建模式,创建基本表。
2.对基本表进行删除,查询,更新,修改。
3.创建视图,并对视图进行更新,删除。