数据库实验报告
班级:计算机科学与技术 1005
学号:0909102518
姓名:赵书剑
指导教师:盛津芳
目 录
一. 实验目的……………………………………… 1
二. 实验要求……………………………………… 1
三. 实验内容……………………………………… 1
四. 运行结果……………………………………… 9
五. 实验总结……………………………………… 31
一. 实验目的
1. 了解 DBMS 的工作环境和系统框架;
2. 通过 SQL 语言对数据库进行操作;
3. 熟悉 SQL 语句。
二. 实验要求
1.所有的 SQL 语句和源代码;
2.要求有适当的注释;
3.性约束实施、实验三、实验四和实验五要求给出相应的测试用
例。
三.实验内容
实验一:创建表、更新表和实施数据完整性
1. 运行给定的 SQL Script,建立数据库 GlobalToyz。
2. 创建所有表的关系图。
3. 列出所有表中出现的约束(包括 Primary key, Foreign key,
check constraint, default, unique)
4. 对 Recipient 表和 Country 表中的 cCountryId 属性定义一个用
户自定义数据类型,并将该属性的类型定义为这个自定义数据
类型。
5. 把 价 格 在 $20 以 上 的 所 有 玩 具 的 材 料 拷 贝 到 称 为
PremiumToys 的新表中。
6. 对表 Toys 实施下面数据完整性规则:(1)玩具的现有数量应
在 0 到 200 之间;(2)玩具适宜的最低年龄缺省为 1。
7. 不修改已创建的 Toys 表,利用规则实现以下数据完整性:(1)
玩具的价格应大于 0;(2)玩具的重量应缺省为 1。
8. 给 id 为‘000001’玩具的价格增加$1。
实验二:查询数据库
1. 显示属于 California 和 Illinoi 州的顾客的名、姓和 emailID。
2. 显示定单号码、商店 ID,定单的总价值,并以定单的总价值
的升序排列。
3. 显示在 orderDetail 表中 vMessage 为空值的行。
4. 显示玩具名字中有“Racer”字样的所有玩具的材料。
5. 根据 2000 年的玩具销售总数,显示“Pick of the Month”玩具
的前五名玩具的 ID。
6. 根据 OrderDetail 表,显示玩具总价值大于¥50 的定单的号码
和玩具总价值。
7. 显示一份包含所有装运信息的报表,包括:Order Number,
Shipment Date, Actual Delivery Date, Days in Transit. (提示:
Days in Transit = Actual Delivery Date – Shipment Date)
8. 显 示 所 有 玩 具 的 名 称 、 商 标 和 种 类 (Toy Name, Brand,
Category)。
9. 以下列格式显示所有购物者的名字和他们的简称:(Initials,
vFirstName, vLastName),例如 Angela Smith 的 Initials 为 A.S。
10. 显示所有玩具的平均价格,并舍入到整数。
11. 显示所有购买者和收货人的名、姓、地址和所在城市,要求
显示结果中的重复记录。
12. 显示没有包装的所有玩具的名称。(要求用子查询实现)
13. 显示已收货定单的定单号码以及下定单的时间。(要求用子查
询实现)
14. 显示一份基于 Orderdetail 的报表,包括 cOrderNo,cToyId 和
mToyCost,记录以 cOrderNo 升序排列,并计算每一笔定单的玩
具总价值。(提示:使用运算符 COMPUTE BY)。
15. 把 价 格 在 $20 以 上 的 所 有 玩 具 的 信 息 拷 贝 到 称 为
PremiumToys 的新表中。
实验三:视图与触发器
1. 定义一个视图,包括购买者的姓名、所在州和他们所订购玩具
的名称、价格和数量。
2. 基于(1)中定义的视图,查询显示所有 California 州的购买
者的姓名和他们所订购玩具的名称及数量。
3. 视
图
定
义
如
下
:
CREATE
AS
VIEW
vwOrderWrapper
SELECT
cOrderNo,
cToyId,
siQty,
vDescription,
mWrapperRate
FROM
OrderDetail
JOIN
Wrapper
ON OrderDetail.cWrapperId = Wrapper.cWrapperId
以下更新命令,在更新 siQty 和 mWrapperRate 属性使用了以
下 更 新 命 令 时 出 现 错 误 :
vwOrderWrapper
UPDATE
SET siQty = 2, mWrapperRate = mWrapperRate + 1
FROM
vwOrderWrapper
WHERE
cOrderNo
=
‘000001’
修改更新命令,以更新基表中的值。
4. 在 OrderDetail 上定义一个触发器,如果购物者改变了定单的
数量,玩具的成本也自动地改变。(提示:Toy cost = Quantity
* Toy Rate)
实验四:存储过程
1. 编写一段程序,将每种玩具的价格提高¥0.5,直到玩具的平
均价格接近$24.5 为止。此外,任何玩具的最大价格不应超过
$53。
2. 创建一个称为 prcCharges 的存储过程,它返回某个定单号的
装运费用和包装费用。
3. 创建一个称为 prcHandlingCharges 的过程,它接收定单号并
显示经营费用。PrchandlingCharges 过程应使用 prcCharges
过 程 来 得 到 装 运 费 和 礼 品 包 装 费 。
提示:经营费用=装运费+礼品包装费
实验五:事务与游标
1. 名为 prcGenOrder 的存储过程产生存在于数据库中的定单号:
CREATE
@OrderNo
as
PROCEDURE
prcGenOrder
char(6)
OUTPUT
SELECT @OrderNo=Max(cOrderNo)
FROM Orders
SELECT
CASE
@OrderNo=
WHEN @OrderNo>=0 and @OrderNo<9 Then
‘00000’+Convert(char,@OrderNo+1)
WHEN @OrderNo>=9 and @OrderNo<99 Then
‘0000’+Convert(char,@OrderNo+1)
WHEN @OrderNo>=99 and @OrderNo<999 Then
‘000’+Convert(char,@OrderNo+1)
WHEN @OrderNo>=999 and @OrderNo<9999 Then
‘00’+Convert(char,@OrderNo+1)
WHEN @OrderNo>=9999 and @OrderNo<99999
Then
‘0’+Convert(char,@OrderNo+1)
WHEN
@OrderNo>=99999
Then