数据库课后习题答案第四版.docx
《数据库课后习题答案第四版.docx》由会员分享,可在线阅读,更多相关《数据库课后习题答案第四版.docx(33页珍藏版)》请在冰点文库上搜索。
数据库课后习题答案第四版
数据库原理实验手册
实验一
实验名称:
熟悉SQLSERVER2000环境
一、实验目的
熟悉SQLSERVER2000提供的服务管理器、企业管理器、查询分析器、客户端和服务器端网络实用工具等常用管理工具的使用。
了解Windows身份验证和SQLServer身份验证这两种连接数据库服务器方式的不同,并能够使用某种连接方式登陆上SQLSERVER数据库服务器。
学会使用SQLSERVER的联机丛中寻求帮助。
二、实验原理
使用SQLSERVER2000提供的各种常用管理工具进行有关的操作。
三、实验设备
安装有SQLSERVER2000的计算机。
四、实验内容
1.启动SQLSERVER服务。
2.打开SQLSERVER的企业管理器,连接上SQLSERVER服务器。
展开左边树状窗口的各级结点,观察右边内容窗口的变化。
3.在SQLSERVER的企业管理器的树状窗口或内容窗口中选择某一项,点击鼠标右键,了解快捷菜单中的有关功能。
4.使用Windows身份验证的连接方式打开SQLSERVER的查询分析器,在查询窗口用USE命令打开样例数据库pubs(也可以从工具栏中的数据库下拉列表中选择pubs数据库)。
5.在查询窗口输入execsp_help,运行后察看结果。
6.在查询窗口输入select*fromauthors,运行后察看结果。
7.在SQLSERVER的查询分析器的“帮助”菜单中点击“目录与索引”,然后在SQLSERVER的联机丛中选“索引”,输入要查找的关键字“sp_help”、“exec”、“select”,了解它们的含义。
8.在SQLSERVER的企业管理器中创建数据库S_T,并在该数据库中创建表student、course和sc,在创建表的同时可以创建各种约束。
这三个表的结构可以参考书上85页的例5、例6和例7。
9.向各个表输入数据,各个表的数据可参考书56页的图。
10.在SQLServer的查询分析器中打开S_T数据库,输入书中91页开始的例题,实现对数据库的查询。
实验二
实验名称:
创建和修改数据库
一、实验目的
熟悉SQLSERVER的企业管理器和查询分析器的用户界面,掌握用企业管理器和查询分析器创建数据库,修改数据库和删除数据库的方法。
了解数据库的三种文件类型:
主数据文件(.mdf)、次要数据文件(.ndf)和事务日志文件(.ldf)。
二、实验原理
在企业管理器中实现对数据库的管理及使用T—SQL语句CREATEDATABASE、ALTERDATABASE及DROPDATABASE来实现数据库的创建、修改及删除。
三、实验设备
安装有SQLSERVER2000的计算机。
四、实验示例
1.创建名称为testdb的数据库,数据库中包含一个数据文件,逻辑文件名为testdb_data,磁盘文件名为,文件初始容量为2MB,最大容量为8MB,文件容量递增值为1MB;事务日志文件的逻辑文件名为testdb_log,磁盘文件名为,文件初始容量为1MB,最大容量为5MB,文件容量递增值为1MB。
CREATEDATABASEtestdb
ON
(NAME=testdb_data,
FILENAME='d:
\DATA\',
SIZE=2MB,
MAXSIZE=8MB,
FILEGROWTH=1MB)
LOGON
(NAME=’testdb_log’,
FILENAME='d:
\DATA\',
SIZE=1MB,
MAXSIZE=5MB,
FILEGROWTH=1MB)
2.对testdb数据库进行修改:
添加一个数据文件,逻辑文件名为testdb2_data,磁盘文件名为,文件初始容量为1MB,最大容量为5MB,文件容量递增值为1MB。
ALTERDATABASEtestdb
ADDFILE
(NAME=testdb2_data,
FILENAME='d:
\DATA\',
SIZE=1MB,
MAXSIZE=5MB,
FILEGROWTH=1MB)
五、实验内容
分别使用SQLSERVER2000企业管理器和T—SQL语句,按下列要求创建、修改和删除用户数据库。
1.删除数据库S_T,在查询分析器中用命令采用默认设置创建数据库S_T(只需给出数据库名)。
2.创建名称为company的数据库,数据库中包含一个数据文件,逻辑文件名为company_data,磁盘文件名为,文件初始容量为5MB,最大容量为15MB,文件容量递增值为1MB;事务日志文件的逻辑文件名为company_log,磁盘文件名为,文件初始容量为5MB,最大容量为10MB,文件容量递增值为1MB。
3.对该数据库进行修改:
添加一个数据文件,逻辑文件名为company2_data,磁盘文件名为,文件初始容量为1MB,最大容量为5MB,文件容量递增值为1MB;将日志文件company_log的最大容量增加为15MB,文件容量递增值为2MB。
4.在company数据库中添加一个文件组TempGroup,并向该文件组中添加一个容量为3MB,最大容量为10MB,递增量为1MB的数据文件,该数据文件的逻辑文件名为company3_data,磁盘文件名为。
5.在company数据库中删除数据文件company2_data。
6.删除数据库company。
7.采用默认设置创建数据库company。
实验三
实验名称:
创建和修改数据表
一、实验目的
熟悉有关数据表的创建和修改等工作,理解数据库模式的概念,了解主键约束、外键约束、UNIQUE约束和CHECK约束的创建和应用。
要求学生熟练掌握使用企业管理器和T—SQL语句CREATETABLE、ALTERTABLE及DROPTABLE语句对数据表进行管理。
二、实验原理
在企业管理器中实现表的创建和修改等工作及使用T—SQL语句CREATETABLE、ALTERTABLE及DROPTABLE来实现数据表的创建、修改及删除。
三、实验设备
安装有SQLSERVER2000的计算机。
四、实验示例
两个示例:
一个是书上的学生选课数据库S_T,S_T数据库中有学生表student,课程表course和学生选课表sc。
各表的结构如下:
学生表student
Sno
char(5)
Notnull
primarykey
学号
Sname
char(20)
Notnull
姓名
Ssex
char
(2)
Notnull
性别
Sage
smallint
Notnull
年龄
Sdept
char(20)
Notnull
系别
课程表course
Cno
char(4)
Notnull
primarykey
课程号
Cname
char(40)
Notnull
课程名
Cpno
char(4)
先行课
Ccredit
smallint
Notnull
学分
学生选课表sc
Sno
char(5)
Notnull
primarykey
学号
Cno
char(4)
Notnull
primarykey
课程号
Grade
smallint
成绩
另一个示例是某公司的产品销售数据库company,company数据库中存在人事表employee、客户表customer、销售表sales、销售明细表sale_item、产品表product。
各表的结构如下:
员工人事表employee
emp_no
char(5)
Notnull
primarykey
员工编号
emp_name
varchar(10)
Notnull
员工姓名
sex
char
(2)
Notnull
性别
dept
varchar(10)
Notnull
所属部门
title
varchar(10)
Notnull
职称
date_hired
datetime
Notnull
雇佣日
birthday
datetime
Null
生日
salary
int
Notnull
薪水
telephone
varchar(20)
Null
电话
addr
varchar(50)
null
住址
客户表customer
cust_id
char(5)
Notnull
primarykey
客户号
cust_name
varchar(20)
Notnull
客户名称
addr
varchar(40)
Notnull
客户住址
tel_no
varchar(20)
Notnull
客户电话
zip
char(6)
null
邮政编码
销售主表sales
order_no
int
Notnull
primarykey
订单编号
cust_id
char(5)
Notnull
客户号
sale_id
char(5)
Notnull
业务员编号
tot_amt
numeric(9,2)
Notnull
订单金额
order_date
datetime
Notnull
订货日期
销货明细表sale_item
order_no
int
Notnull
primarykey
订单编号
prod_id
char(5)
Notnull
primarykey
产品编号
qty
int
Notnull
销售数量
unit_price
numeric(7,2)
Notnull
单价
order_date
datetime
null
订单日期
产品名称表product
prod_id
char(5)
Notnull
primarykey
产品编号
prod_name
varchar(20)
Notnull
产品名称
1.创建表及相应的约束
createtableemployee1(
emp_nochar(5)notnullcheck(emp_nolike'[E-F][0-9][0-9][0-9][0-9]'),
emp_namechar(10)notnull,
emp_sexchar
(1)notnullcheck(emp_sexin('m','f')),
emp_phonechar(13)notnull,
emp_addvarchar(60)notnull,
emp_salarychar(5)notnullcheck(emp_salarybetween60000and80000)
)
go
2.修改表
altertableemployee
addconstraintck_phonecheck(phonelike’[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]
[0-9][0-9][0-9][0-9][0-9]’)
五、实验内容
分别在SQLSERVER2000企业管理器和在查询分析分析器中使用T—SQL语句完成以下操作:
针对S_T数据库:
1.创建student表,设置Sno为主键;在Sno列上创建核查约束,要求学号各个位上只能取数字字符;在Ssex列上创建核查约束,要求性别只能取“男”或“女”;在Sage列上创建核查约束,要求学生的年龄只能在14至38之间。
2.创建course表,设置列Cno为主键;在Cno列上创建核查约束,要求课程号只能取数字字符。
3.创建sc表,设置主键为Sno与Cno的组合;在Grade列上创建核查约束,限定成绩只能在0-100。
4.修改course表,在表中为Cpno列添加一外键约束Fk_Cpno,它参照了course表的主键Cno。
5.修改sc表,在表中为Sno添加一外键约束Fk_Sno,它参照了student表中的主键Sno;为Cno添加外键约束Fk_Cno,它参照了course表中的主键Cno。
针对company数据库:
1.在数据库company中创建以上五张表,并设置各表的主键。
2.在销售主表sales中添加字段“发票号码”invoice_no,char(10),NOTNULL。
3.添加外键约束:
a)在销售主表sales的业务员编号字段sale_id上添加外键约束,参照字段为员工表employee中的字段员工编号emp_no,约束名为FK_sale_id。
b)在销售主表sales的客户号字段cust_id上添加外键约束,参照字段为客户表customer中的字段客户号cust_id,约束名为FK_cust_id。
c)在销售明细表sale_item的订单编号字段order_no上添加外键约束,参照字段为销售主表sales中的字段订单编号order_no,约束名为FK_order_no。
d)在销售明细表sale_item的产品编号字段prod_id上添加外键约束,参照字段为产品名称表product中的产品编号字段prod_id,约束名为FK_prod_id。
4.添加核查约束:
a)将员工表employee中的薪水字段salary的值限定在1000至10000间,约束名为CK_salary。
b)将员工表employee中的员工编号字段emp_no设定为以“E”字母开头,后面跟5位数的编号,约束名为CK_emp_no。
c)将员工表employee中的性别字段设定这取值只能是“男”和“女”。
约束名为CK_sex。
d)将销售主表sales中的发票号码字段invoice_no设定为以“I”字母开头,后面跟9位数的编号,约束名为CK_inno。
5.为销售主表sales中的字段发票号码invoice_no设置为唯一约束,约束名为UN_inno。
实验四
实验名称:
简单的单表查询
一、实验目的
熟练掌握用SELECT语句实现简单的单表查询。
掌握SELECT子句、FROM子句、WHERE子句及ORDERBY子句的用法。
二、实验原理
用SELECT语句实现简单的单表查询。
在SELECT子句中用TOP关键字来限制返回到结果集中的记录数目,用DISTINCT关键字从结果集中去掉重复的记录。
WHERE子句中用关系比较符、[NOT]BETWEEN、[NOT]IN、LIKE、IS[NOT] NULL及逻辑运算符构成查询条件,对结果集中的记录进行筛选。
ORDERBY子句将根据查询结果集中一个或多个字段对查询结果进行排序。
三、实验设备
安装有SQLSERVER2000的计算机。
四、实验示例
1.查找表中所有姓刘的职工的工号,姓名,部门,薪水
selectemp_no,emp_name,dept,salary
fromemployee
whereemp_namelike'刘%'
2.查找所有定单金额高于20000的所有客户编号
selectcust_id
fromsales
wheretot_amt>20000
3.查找业务部或会计部的女员工的基本信息。
selectemp_no,emp_name,dept
fromemployee
wheresex='女'anddeptin('业务','会计')
4.选取编号界于‘C0001’和‘C0004’的客户编号、客户名称、客户地址。
selectcust_id,cust_name,addr
fromcustomer
wherecust_idbetween'C0001'AND'C0004'
5.选取销售数量最多的前5条订单订单号、数量。
selecttop5order_no,qty
fromsale_item
orderbyqtydesc
6.计算出sale_item表中每一笔销售数据的销售金额,并按照销售金额的大小排序。
selectprod_id,qty,unit_price,(qty*unit_price)tot_amt
fromsale_item
orderbytot_amtdesc
五、实验内容
运行查询文件,生成上机必要的数据,然后完成以下操作。
1、查找所有经理的姓名、职称、薪水。
2、在销售主表sales中查找销售金额大于等于10000元的订单。
3、在员工表employee中查找薪水在4000至8000元之间的员工。
select*
fromemployee
wheresalarybetween4000and8000
4、在员工表employee中查找住址为上海、北京、天津这三个城市的员工。
5、在客户表customer中查找住址不在上海、北京、天津这三个城市的客户。
6、在员工表employee中查找姓“王”用姓名最后一个字为“功”的员工。
7、在客户表customer中查找姓“刘”的客户名称、电话。
selectcust_name,tel_no
fromcustomer
wherecust_namelike'刘%'
8、查找出职称为“经理”或“职员”的女工的信息。
9、查找薪水最高的前三条员工记录。
10、查找订单金额最高的前10%的订单记录。
selecttop10percent*
fromsales
orderbytot_amtdesc
11、查找员工表中所属部门。
(去掉重复记录)
selectdistinctemp_no,emp_name,dept
fromemployee
12、查找员工表中的所有记录,并按薪水由低到高进行排序。
select*
fromemployee
orderbysalaryasc
实验五
实验名称:
复杂的单表查询
一、实验目的
熟练掌握SELECT查询语句中的Groupby子句、Having子句的用法,以及汇总函数的使用。
二、实验原理
在查询语句中用Groupby子句进行分组;
用Having子句对分组进行筛选。
使用MAX(),MIN(),COUNT(),SUM(),AVG()等函数在查询结果集中生成汇总值。
三、实验设备
安装有SQLSERVER2000的计算机。
四、实验示例
1、统计表中员工的薪水在40000-60000之间的人数
selectcount(*)as人数
fromemployee
wheresalarybetween40000and60000
2、计算'P0001'产品的平均销售单价
selectavg(unit_price)
fromsale_item
whereprod_id='P0001'
3、找出目前销售业绩超过40000元的业务员编号及销售业绩,并按销售业绩从大到小排序。
Selectsale_id,sum(tot_amt)
fromsales
groupbysale_id
havingsum(tot_amt)>40000
orderbysum(tot_amt)desc
4、查询订购了三种以上产品的订单号。
Selectorder_nofromsale_item
Groupbyorder_no
Havingcount(*)>3
五、实验内容
1、在员工表employee中统计员工人数。
selectcount(*)人数
fromemployee
2、统计各部门员工的员工人数及平均薪水。
selectcount(*)人数,avg(salary)平均工资
fromemployee
3、查询销售业绩超过10000元的员工编号。
selectsale_id
from(selectsale_id,sum(tot_amt)amount
fromsales
groupbysale_id)a
where>10000
4、计算每一产品销售数量总和与平均销售单价。
selectprod_id,sum(qty)tot_amount,sum(unit_tot)/sum(qty)average_unit_price
from(selectprod_id,qty,qty*unit_priceunit_tot
fromsale_item
)a
groupbyprod_id
5、统计各部门不同性别、或各部门、或不同性别或所有员工的平均薪水。
(在GROUPBY子句中使用CUBE关键字)
6、统计各部门不同性别、或各部门或所有员工的平均薪水。
(在GROUPBY子句中使用ROLLUP关键字)
7、计算出一共销售了几种产品。
selectcount(prod_id)
from(selectdistinctprod_id
fromsale_item)a
8、显示sale_item表中每种产品的订购金额总和,并且依据销售金额由大到小排列来显示出每一种产品的排行榜。
selectprod_id,sum(qty)tot_amount,sum(unit_tot)tot_amount
from(selectprod_id,qty,qty*unit_priceunit_tot
fromsale_item
)a
groupbyprod_id
orderbysum(unit_tot)desc
9、计算每一产品每月的销售金额总和,并将结果按销售(月份,产品编号)排序。
selectprod_id,month,sum(unit_amount)month_amount
from(selectprod_id,qty*unit_priceunit_amount,month(order_date)month
fromsale_item)a
groupbyprod_id,month
orderbyprod_idasc,month_amountdesc
10、查询每位业务员各个月的业绩,并按业务员编号、月份降序排序
selectsale_id,sum(tot_amt)month_amount,month(order_date)month
fromsales
groupbysale_id,month(order_date)
orderbysale_iddesc,monthdesc
实验六
实验名称:
连接查询
一、实验目的
掌握使用连接的方法从多个表中查询数据。
理解内连接、外连接(包括左外连接、右外连接和全外连接)、自身连接的概念和使用。
要求学生熟练掌握在FROM子句和在WHERE子句中指定连接条件的这两种方法。
二、实验原理
在查询语