数据库实验——T-SQL语言创建及管理数据表

1、创建数据表
1)在数据库student中创建模式XSKC

CREATE SCHEMA XSKC;

2)在student数据库中建立基于XSKC模式的数据表,表结构如下所示;

student(学生信息表)

字段名称字段类型及长度说明备注
snochar(9)学生学号主关键字
snamenvarchar(6)学生姓名非空
ssexnchar(1)学生性别可为空
sageint学生年龄可为空
sdeptnvarchar(8)学生所在院系可为空

course(课程信息表)

字段名称字段类型及长度说明备注
cnochar(4)课程编号主关键字
cnamenvarchar(20)课程名称非空
cpnochar(4)先行课号可为空
ccreditint学分可为空

sc(选课信息表)

字段名称字段类型及长度说明备注
snochar(9)学生学号主关键字
cnochar(4)课程编号主关键字
gradeint成绩可为空

USE student
CREATE TABLE XSKC.student
(sno char(9) PRIMARY KEY,
sname nvarchar(6) NOT NULL,
ssex nchar(1),
sage int,
sdept nvarchar(8),)

USE student
CREATE TABLE XSKC.course
(cno char(4) PRIMARY KEY,
cname nvarchar(20) NOT NULL,
cpno char(4),
ccredit int,)

USE student
CREATE TABLE XSKC.sc
(sno char(9),
cno char(4),
grade int,
PRIMARY KEY(SNO,CNO))

2、修改表结构
1)在shouke表里添加一个授课类别字段,列名为Type,类型为Char(4);

ALTER TABLE shouke
Add Type char(4)

2)将shouke表的Hours的类型改为smallint;

ALTER TABLE shouke
Alter column Hours smallint

3)删除lessons表中的property列;

ALTER TABLE lessons
Drop column property

4)在表shouke中删除字段Type;

ALTER TABLE shouke
Drop column Type

5)修改表student中字段名为“sname”的字段长度由原来的6改为8;

ALTER TABLE XSKC.student
Alter column sname nvarchar(8)

6)删除数据表lessons;

DROP TABLE dbo.lessons

实验步骤

Management界面方式下的操作步骤
打开已经创建的数据库名称前方的小加号,在【表】节点上右击,选择【新建表】命令,打开表设计器窗口。在表设计器窗口中输入列名。选择数据类型及是否允许为空的情况,并在主键字段的前方单击鼠标右键,选择【设置主键】选项。也可以在列属性的说明中标出每个字段代表的含义。设计完成后按Ctrl+S组合键保存,在弹出的对话框中输入表名,单击【确定】按钮。
T-SQL语句方式下的操作步骤:
在【SQL Server Management Studio】窗口左上方选择【新建查询】按钮,启动SQL编辑器窗口,在光标处输入T-SQL语句,单击【执行】按钮。

实验一:创建、更新和实施数据完整性 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. 显示在orderDetailvMessage为空值的行。 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. 显示玩具的名称和所有玩具的购物车ID。如果玩具不在购物车,则显示NULL值。 10. 以下列格式显示所有购物者的名字和他们的简称:(Initials, vFirstName, vLastName),例如Angela Smith的Initials为A.S。 11. 显示所有玩具的平均价格,并舍入到整数。 12. 显示所有购买者和收货人的名、姓、地址和所在城市。 13. 显示没有包装的所有玩具的名称。(要求用子查询实现) 14. 显示已发货定单的定单号码以及下定单的时间。(要求用子查询实现) 实验三:视图与触发器 1. 定义一个视图,包括购买者的姓名、所在州和他们所订购玩具的名称、价格和数量。 2. 基于(1)定义的视图,查询显示所有California州的购买者的姓名和他们所订购玩具的名称及数量。 3. 视图定义如下: CREATE VIEW vwOrderWrapper AS SELECT cOrderNo, cToyId, siQty, vDescription, mWrapperRate FROM OrderDetail JOIN Wrapper ON OrderDetail.cWrapperId = Wrapper.cWrapperId 以下更新命令,在更新siQty和mWrapperRate属性使用了以下更新命令时出现错误: UPDATE vwOrderWrapper 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 PROCEDURE prcGenOrder @OrderNo char(6) OUTPUT as SELECT @OrderNo=Max(cOrderNo) FROM Orders SELECT @OrderNo= CASE WHEN @OrderNo>=0 and @OrderNo=9 and @OrderNo=99 and @OrderNo=999 and @OrderNo=9999 and @OrderNo=99999 Then Convert(char,@OrderNo+1) END RETURN 当购物者确认定单时,应该出现下面的步骤: (1)用上面的过程产生定单号。 (2)定单号,当前日期,购物车ID,和购物者ID应该加到Orders。 (3)定单号,玩具ID,和数量应加到OrderDetail。 (4)在OrderDetail更新玩具成本。(提示:Toy cost = Quantity * Toy Rate). 将上述步骤定义为一个事务。编写一个过程以购物车ID和购物者ID为参数,实现这个事务。 2. 编写一个程序显示每天的定单状态。如果当天的定单值总合大于170,则显示“High sales”,否则显示”Low sales”.报告要求列出日期、定单状态和定单总价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值