数据库实验四资料.docx

上传人:b****4 文档编号:12302710 上传时间:2023-04-18 格式:DOCX 页数:24 大小:2.51MB
下载 相关 举报
数据库实验四资料.docx_第1页
第1页 / 共24页
数据库实验四资料.docx_第2页
第2页 / 共24页
数据库实验四资料.docx_第3页
第3页 / 共24页
数据库实验四资料.docx_第4页
第4页 / 共24页
数据库实验四资料.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

数据库实验四资料.docx

《数据库实验四资料.docx》由会员分享,可在线阅读,更多相关《数据库实验四资料.docx(24页珍藏版)》请在冰豆网上搜索。

数据库实验四资料.docx

数据库实验四资料

实验项目名称:

T-SQL程序设计实验学时:

4

同组学生姓名:

实验地点:

b513

实验日期:

2012.11.272012.12.04实验成绩:

批改教师:

批改时间:

一、实验目的和要求

1、掌握T-SQL中运算符和表达式的使用;

2、通过对Select的使用,掌握Select语句的结构及其应用;

3、掌握T-SQL中几个常用流程控制语句的使用;

4、掌握系统内置函数的概念及其应用;

5、通过定义和使用用户自定义函数,掌握自定义函数的概念及其应用。

二、实验设备、环境

设备:

奔腾Ⅳ或奔腾Ⅳ以上计算机;

环境:

WINDOWS2000SERVER或WINDOWS2003SERVER、SQLServer2005中文版。

三、实验步骤

1、根据题目要求熟悉SQLServer2005的各种管理工具;

2、分析题意,重点分析题目要求并给出解决方法;

3、按题目要求完成实际操作任务,并将相关文档资料保存在以自己学号命名的文件夹中;

4、提交完成的实验结果。

四、实验内容

一、SQL查询(*使用SQLServer样例数据库pubs完成)

1、简单查询

(1)查询所有作者的姓名和作者号信息,并在每个作者的作者号前面显示字符串“身份证号:

”表明显示信息是身份证信息;(authors表)

(2)改变显示列名。

显示所有作者的姓名信息和作者号信息,要求用“名”和“姓”来区别fname和lname,“作者编号”来区分作者号;(authors表)

(3)查询所有书在价格提高10%后的价格和书名信息;(titles表)

(4)查询所有书的书号和税后价格。

(titles表,royalty列表示税率);

(5)查询所有作者的姓和“名的第一个字符”以及作者号;(authors表,SUBSTRING函数)

(6)查询邮政编码大于9000的作者姓名和电话信息;(authors表)

(7)查询出版日期在1/1/1991到12/31/1991之间的书名(书名限制为38个字符)和出版日期;(titles表,SUBSTRING函数)

(8)查询书的类型是mod_cook或trad_cook的书名和它的类型;(titles表)

(9)查询店名中包含Book的店的信息;(stores表);

(10)查询书名以T开头或者出版号为0877,且价格大于16美元的书的信息;(titles表)

(11)查询所有作者的所在城市和州名,要求没有重复信息;(authors表)

(12)按照类型的升序和价格的降序显示书的信息;(titles表)

2、生成汇总数据

(1)计算多少种书已被定价;(titles表)

(2)计算每本书的书号及它的售书总量;(sales表)

(3)求销售量大于30的书号及销售数量;(sales表)

(4)显示在1994年1月1日到1994年10月31日间,每本书的销售总额;(sales表,titles表)

3、连接查询

(1)求每本杂志上刊登的文章;(titles,publishers表)

(2)求某书店销售某书的数量;(titles,stores,sales表)

(3)查询所有合著的书及其作者。

(4)显示所有已销售的书名。

4、子查询

(1)查询有销售记录的所有书信息,包括书的编号、书名、类型和价格;

(2)求已销售的书的信息;

二、函数

1、自定义一个名为Sage_func函数,按出生年月计算年龄。

然后从Student表中检索出含有年龄的学生信息。

2、定义一个名为grade_func的自定义函数,将成绩从百分制转化为五级记分制。

将该用户定义函数用在查询每个学生的成绩中,给出五级记分制的成绩。

三、流程控制

1、Student表中若存在学号为“19920101”的学生,则显示已存在的信息,否则插入该学生的记录。

然后从student表中删除学号为“19920101”的学生记录,重新执行该程序,观察与上次有何不同。

2、使用While语句求1到100之间的累加和,输出结果。

五、问题解答及实验结果

1、简单查询

(1)查询所有作者的姓名和作者号信息,并在每个作者的作者号前面显示字符串“身份证号:

”表明显示信息是身份证信息;(authors表)

1.select'身份证号:

'+au_id,au_fname,au_lnamefromauthors;

(2)改变显示列名。

显示所有作者的姓名信息和作者号信息,要求用“名”和“姓”来区别fname和lname,“作者编号”来区分作者号;(authors表)

2.selectau_id作者编号,au_fname姓,au_lname名fromauthors;

(3)查询所有书在价格提高10%后的价格和书名信息;(titles表)

3.selecttitle,price*1.1fromtitles;

(4)查询所有书的书号和税后价格。

(titles表,royalty列表示税率);

selecttitle_id,price*(1+royalty)pricefromtitles;

(5)查询所有作者的姓和“名的第一个字符”以及作者号;(authors表,SUBSTRING函数)

selectau_id,au_lname,SUBSTRING(au_fname,1,1)fromauthors;

(6)查询邮政编码大于9000的作者姓名和电话信息;(authors表)

selectau_fname,au_lname,phonefromauthorswherezip>9000;

(7)查询出版日期在1/1/1991到12/31/1991之间的书名(书名限制为38个字符)和出版日期;(titles表,SUBSTRING函数)

selectSUBSTRING(title,1,38),pubdatefromtitleswherepubdate>'1/1/1991'andpubdate<'12/31/1991';

(8)查询书的类型是mod_cook或trad_cook的书名和它的类型;(titles表)

selecttitle,typefromtitleswheretype='mod_cook'ortype='trad_cook';

(9)查询店名中包含Book的店的信息;(stores表);

4.select*fromstoreswherestor_namelike'%Book%';

(10)查询书名以T开头或者出版号为0877,且价格大于16美元的书的信息;(titles表)

select*fromtitleswhereSUBSTRING(title,1,1)='T'orpub_id=0877andprice>16;

(11)查询所有作者的所在城市和州名,要求没有重复信息;(authors表)

selectDISTINCTcity,statefromauthors;

(12)按照类型的升序和价格的降序显示书的信息;(titles表)

select*fromtitlesorderbytypeasc,pricedesc;

2、生成汇总数据

(1)计算多少种书已被定价;(titles表)

selectcount(title_id)fromtitleswherepriceisnotnull;

(2)计算每本书的书号及它的售书总量;(sales表)

selecttitle_id,sum(qty)qtyfromsalesgroupbytitle_id;

(3)求销售量大于30的书号及销售数量;(sales表)

selecttitle_id,sum(qty)qtyfromsalesgroupbytitle_idhaving(sum(qty)>30);

(4)显示在1994年1月1日到1994年10月31日间,每本书的销售总额;(sales表,titles表)

selecttitles.title_id,sum(sales.qty)*titles.price销售总额fromsales,titleswheretitles.pubdatebetween'1/1/1991'and'12/31/1991'groupbysales.title_id,titles.price,titles.title_id

having(sales.title_id=titles.title_id)

3、连接查询

(1)求每本杂志上刊登的文章;(titles,publishers表)

selecttitles.title,publishers.pub_namefromtitles,publishers

wheretitles.pub_id=publishers.pub_id

(2)求某书店销售某书的数量;(titles,stores,sales表)

selecta.title,b.stor_name,c.qtyfromtitlesa,storesb,salesc

wherea.title_id=c.title_idandb.stor_id=c.stor_id

(3)查询所有合著的书及其作者。

selectdistinct(a.title_id),b.au_id,a.au_id

fromtitleauthora,titleauthorbwherea.title_id=b.title_id

(4)显示所有已销售的书名。

selecttitle,sum(qty)qtyfromsales,titles

wheresales.title_id=titles.title_idgroupbytitle

4、子查询

(1)查询有销售记录的所有书信息,包括书的编号、书名、类型和价格;

selectsales.title_id,titles.title,titles.[type],titles.price

fromtitles,saleswheresales.title_id=titles.title_id

(2)求已销售的书的信息;

二.函数

1、自定义一个名为Sage_func函数,按出生年月计算年龄。

然后从Student表中检索出含有年龄的学生信息。

createfunctionSage_func(@vardatedatetime,@curdatedatetime)

returnstinyint

asbegin

returndatediff(yy,@vardate,@curdate)end

selectSNOas学号,SNameas姓名,dbo.Sage_func(Birthday,getdate())as年龄fromStudent

2、定义一个名为grade_func的自定义函数,将成绩从百分制转化为五级记分制。

将该用户定义函数用在查询每个学生的成绩中,给出五级记分制的成绩。

createfunctiongrade_func(@Scorceint)

returnstinyint

asbeginreturn@Scorce/20end

selectSNameas姓名,dbo.grade_func(Scorce)as五级分制

fromGrade,StudentwhereGrade.SNO=Student.SNO

三、流程控制

1.

ifexists(select*fromStudentwhereSNO='19920101')

beginselect*fromStudentwhereSNO='19920101'end

elsebegin

insertintoStudentvalues('19920101','王军','男','CS01','下关#','1976-12-2100:

00:

00',1.82,10)end

deletefromStudentwhereSNO='19920101'

2、使用While语句求1到100之间的累加和,输出结果。

流程控制语句为:

Declare@sumint,@startint

set@start=1

set@sum=0

begin

while(@start<101)

begin

set@sum=@sum+@start

set@start=@start+1

end

print@sum

end

六、实验体会和收获

这次实验要求我们用各种SQL查询命令进行对表的一些简单操作,例子很多,在练习的同时也掌握了SQL查询语句,俗话说熟能生巧嘛,包括了单表查询,连接查询,子查询等等,但即使这样,我觉得还需要继续练习,要做到在没有老师同学帮助,没有参考资料的时候能够独立完成的漂漂亮亮。

这次实验的内容比较多,时间比较紧,所以在做的时候有点匆忙,幸好在上实验课之前有预习,在理论课上对数据库理论知识的了解基础上,并在自己动手之前,有老师的详细讲解和指导,我慢慢熟悉了对查询操作,在实验课上,操作起来也更便捷和熟练,重要的一点,在上课时要记得认真做笔记,把自己的语句记下来,认真整理实验结果。

最后,实验安排了函数的训练,这是SQLServer功能的又一体现,不过强大归强大,还必须得掌握才行,我得加油了!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1