上机实验题一二.doc
word上机实验题1相关知识:第6章第8章。目的:通过本实验,熟悉SQL Server 2012系统,掌握使用SQL Server管理控制器以与TSQL语句创建数据库和数据表的方法。实验内容:完成以下任务1创建一个数据库Library,其数据库文件存放在D:DB文件夹中。数据库的创建可以用以下SQL语句完成:CREATE DATABASE LibraryON ( NAME = Library, FILENAME = 'D:DBLibrary.MDF', SIZE = 10MB, MAXSIZE = 50MB, FILEGROWTH = 5MB)LOG ON ( NAME = Library , FILENAME = 'D:DBLibrary_Log.LDF', SIZE = 10MB, MAXSIZE = 20MB, FILEGROWTH = 5MB)数据库中包含如下4个关系表:depart(班号,系名)student(学号,某某,性别,出生日期,班号)book(图书编号,图书名,作者,定价,)borrow(学号,图书编号,借书日期)要求:depart表的“班号列为主键,student表的“学号列为主键,book表“图书编号列为主键,borrow表的“学号和“图书编号列为主键。数据表的创建可以使用以下SQL语句完成:USE LibraryCREATE TABLE depart(班号 int PRIMARY KEY,系名 char(20)CREATE TABLE student(学号 int PRIMARY KEY,某某 char(10),性别 char(2),出生日期 datetime,班号 int)CREATE TABLE book(图书编号 char(10) PRIMARY KEY,图书名 char(40),作者 char(10),定价 float, char(30)CREATE TABLE borrow(学号 int,图书编号 char(10),借书日期 datetime,PRIMARY KEY CLUSTERED(学号,图书编号)2使用SQL Server管理控制器或TSQL语句输入以下数据。depart表包含如下数据:班号 系名- -0501 计算机系0502 计算机系0801 电子工程系0802 电子工程系student表包含如下数据:学号 某某 性别 出生日期 班号- - - - -1 X任 男 1995-01-02 0501 2 程华 男 1996-01-10 0501 3 X丽 女 1995-06-07 0502 4 王英 女 1994-12-10 0502 5 李静 男 1995-04-05 050210 许兵 男 1995-08-10 0801 11 X功 男 1995-06-02 0801 12 李华 男 1994-10-03 0801 13 马超 男 1996-02-03 0802 14 曾英 女 1994-03-06 0802 book表包含如下数据:图书编号 图书名 作者 定价 - - - -10011 C程序设计李洪 24 清华大学10012 C程序设计李洪24 清华大学10013 C习题解答 李洪 12 清华大学 10014 C习题解答 李洪 12 清华大学10020 数据结构徐华 29 人民邮电10021 数据结构徐华29 清华大学10023 高等数学王涛 30 高等教育10034 软件工程X明 34 机械工业20025 信息学X港 35 清华大学20026 信息学X港35 清华大学20042 电工学王民 30 人民邮电20056 操作系统曾平 26 清华大学20057 操作系统曾平26 清华大学20058 操作系统曾平26 清华大学20067 数字电路徐汉 32 高等教育20140 数据库原理陈曼32 高等教育20090 网络工程 黄军 38 高等教育borrow表包含如下数据:学号图书编号 借书日期- - -1 10020 2013-12-051 20025 2013-11-081 20059 2014-04-112 10011 2013-10-022 10013 2014-04-033 10034 2014-04-103 20058 2014-04-114 10012 2014-04-065 10023 2014-02-0310 20056 2014-02-0512 20067 2014-03-06相关TSQL语句如下:USE LibraryINSERT INTO depart VALUES(0501,'计算机系')INSERT INTO depart VALUES(0502,'计算机系')INSERT INTO depart VALUES(0801,'电子工程系')INSERT INTO depart VALUES(0802,'电子工程系')USE LibraryINSERT INTO student VALUES(1,'X任','男','1995-01-02',0501) INSERT INTO student VALUES(2,'程华','男','1996-01-10',0501) INSERT INTO student VALUES(3,'X丽','女','1995-06-07',0502) INSERT INTO student VALUES(4,'王英','女','1994-12-10',0502) INSERT INTO student VALUES(5,'李静','男','1995-04-05',0502)INSERT INTO student VALUES(10,'许兵','男','1995-08-10',0801) INSERT INTO student VALUES(11,'X功','男','1995-06-02',0801) INSERT INTO student VALUES(12,'李华','男','1994-10-03',0801) INSERT INTO student VALUES(13,'马超','男','1996-02-03',0802) INSERT INTO student VALUES(14,'曾英','女','1994-03-06',0802) USE LibraryINSERT INTO book VALUES('10011','C程序设计','李洪',24,'清华大学')INSERT INTO book VALUES('10012','C程序设计','李洪',24,'清华大学') INSERT INTO book VALUES('10013','C习题解答','李洪',12,'清华大学') INSERT INTO book VALUES('10014','C习题解答','李洪',12,'清华大学')INSERT INTO book VALUES('10020','数据结构','徐华',29,'人民邮电') INSERT INTO book VALUES('10021','数据结构','徐华',29,'清华大学') INSERT INTO book VALUES('10023','高等数学','王涛',30,'高等教育') INSERT INTO book VALUES('10034','软件工程','X明',34,'机械工业') INSERT INTO book VALUES('20025','信息学','X港',35,'清华大学') INSERT INTO book VALUES('20026','信息学','X港',35,'清华大学') INSERT INTO book VALUES('20042','电工学','王民',30,'人民邮电') INSERT INTO book VALUES('20056','操作系统','曾平',26,'清华大学') INSERT INTO book VALUES('20057','操作系统','曾平',26,'清华大学') INSERT INTO book VALUES('20058','操作系统','曾平',26,'清华大学') INSERT INTO book VALUES('20067','数字电路','徐汉',32,'高等教育')INSERT INTO book VALUES('20080','数据库原理','陈曼',32,'高等教育')INSERT INTO book VALUES('20090','网络工程','黄军',38,'高等教育')USE LibraryINSERT INTO borrow VALUES(1,'10020','2013-12-05')INSERT INTO borrow VALUES(1,'20025','2013-11-08')INSERT INTO borrow VALUES(1,'20059','2014-04-11')INSERT INTO borrow VALUES(2,'10011','2013-10-02')INSERT INTO borrow VALUES(2,'10013','2014-04-03')INSERT INTO borrow VALUES(3,'10034','2014-04-10')INSERT INTO borrow VALUES(3,'20058','2014-04-11')INSERT INTO borrow VALUES(4,'10012','2014-04-06')INSERT INTO borrow VALUES(5,'10023','2014-02-03')INSERT INTO borrow VALUES(10,'20056','2014-02-05')INSERT INTO borrow VALUES(12,'20067','2014-03-06')上机实验题2相关知识:第9章。目的:通过本实验,掌握使用T-SQL语言使用方法。实验内容:对于实验题1创建的Library数据库和表数据,编写程序实现如下功能并给出执行结果:1查询图书品种的总数目。2查询每种图书品种的数目。3查询各班的人数。4查询各系的人数。5查询借阅图书学生的学号、某某、书名和借书日期。6查询借有图书的学生学号和某某。7查询每个学生的借书数目。8找出借书超过2本的学生学号、某某和所借图书册数。9查询借阅了"操作系统"一书的学生,输出学号、某某与班号。10查询每个班的借书总数。11假如图书编号以前3位数字进展分类,查询每类图书的平均价。12查询平均价高于30的图书类别。13查询图书类别的平均价最高价。14假设借书期限为45天,查询过期未还图书编号、书名和借书人学号、某某。15查询书名包括“工程关键词的图书,输出书号、书名、作者16查询现有图书中价格最高的图书,输出书名与作者17查询所有借阅“C程序设计一书的学生学号和某某,再查询所有借了“C程序设计但没有借“C习题解答的学生学号和某某。18查询所有没有借书的学生学号和某某。19查询每个系所借图书总数。20查询各的图书总数。21查询各的图书占图书总数的百分比四舍五入到一位小数。22查询各的图书被借的数目。参考代码如下:1对应的程序如下:USE LibrarySELECT COUNT(DISTINCT(图书名) AS '图书品种数目' FROM book2对应的程序如下:USE LibrarySELECT 图书名 AS '书名',COUNT(*) AS '数目' FROM bookGROUP BY 图书名执行结果如下:3对应的程序如下:USE LibrarySELECT 班号 AS '班号',COUNT(*) AS '人数' FROM studentGROUP BY 班号4对应的程序如下:USE LibrarySELECT sc.系名 AS '系名',COUNT(*) AS '人数' FROM student s,depart sc5对应的程序如下:USE LibraryFROM student s,book b,borrow bor6对应的程序如下:USE LibraryFROM student sWHERE s.学号 IN (SELECT DISTINCT 学号 FROM borrow)7对应的程序如下:USE LibrarySELECT s.学号,s.某某,COUNT(bor.学号) As '数目'FROM student s,borrow bor8对应的程序如下:USE LibrarySELECT s.学号 '学号',s.某某 '某某',COUNT(bor.学号) As '借图书册数'FROM student s,borrow borHAVING COUNT(bor.学号)>=29对应的程序如下:USE LibrarySELECT s.学号,s.某某,s.班号 FROM student s,book b,borrow bor AND b.图书名='操作系统'10对应的程序如下:USE LibrarySELECT s.班号,COUNT(bor.学号) AS '总数'FROM student s,borrow bor11对应的程序如下:USE LibrarySELECT SUBSTRING(图书编号,1,3) As '图书类别',CAST(AVG(定价) AS decimal(4,1) AS '平均价'FROM bookGROUP BY SUBSTRING(图书编号,1,3)12对应的程序如下:USE LibrarySELECT SUBSTRING(图书编号,1,3) As '图书类别',CAST(AVG(定价) AS decimal(4,1) AS '平均价'FROM bookGROUP BY SUBSTRING(图书编号,1,3)HAVING AVG(定价)>3013对应的程序如下:USE LibrarySELECT MAX(平均价) AS '最高平均价'FROM (SELECT SUBSTRING(图书编号,1,3) As '图书类别',CAST(AVG(定价) AS decimal(4,1) AS '平均价'FROM bookGROUP BY SUBSTRING(图书编号,1,3) a14对应的程序如下:USE LibraryPRINT '当前日期:'+CONVERT(char(10),GETDATE(),102)SELECT s.学号,s.某某,bor.图书编号,b.图书名 FROM student s,book b,borrow borWHERE s.学号=bor.学号 AND b.图书编号=bor.图书编号 AND DATEDIFF(day,借书日期,GETDATE()>4515对应的程序如下:USE LibrarySELECT 图书编号,图书名,作者FROM bookWHERE 图书名 LIKE '%工程%' 16对应的程序如下:USE LibrarySELECT 图书编号,图书名,作者FROM bookWHERE 定价=( SELECT MAX(定价) FROM book) 17对应的程序如下:USE LibraryGOPRINT '借<C程序设计>的学生:'FROM student s,book b,borrow borWHERE s.学号=bor.学号 AND b.图书编号=bor.图书编号 AND b.图书名='C程序设计'GOPRINT '借<C程序设计>的但没借<C习题解答>的学生:'FROM student s,borrow bor,book bWHERE s.学号=bor.学号 AND bor.图书编号=b.图书编号 AND b.图书名='C程序设计' AND NOT EXISTS( SELECT * FROM borrow bor1,book b1 WHERE bor1.图书编号=b1.图书编号 AND b1.图书名='C习题解答' AND bor1.学号=bor.学号)18对应的程序如下:USE LibrarySELECT 学号,某某FROM studentWHERE 学号 NOT IN (SELECT DISTINCT 学号 FROM borrow)19对应的程序如下:USE LibrarySELECT sc.系名 AS '系名',COUNT(bor.学号) AS '借书总数'FROM student s,depart sc,borrow bor20对应的程序如下:USE LibrarySELECT AS '',COUNT(*) AS '图书总数'FROM bookGROUP BY 21对应的程序如下:USE LibraryDECLARE num intSELECT num=(SELECT COUNT(*) FROM book)SELECT AS '',CAST(ROUND(COUNT(*)*100.0/num,1) AS decimal(5,1) AS '图书比例(%)'FROM bookGROUP BY 22对应的程序如下:USE LibrarySELECT AS '',COUNT(*) AS '被借图书数目'FROM book b,borrow borGROUP BY 13 / 13