数据库实验书(4)

2020-02-21 16:56

家庭住址 varchar 50 图 1-12 要创建的表的结构 约束要求如下:

① 将学号设置为主键(PRIMARY KEY),主键名为pk_sid。 ② 为姓名添加唯一约束(UNIQUE),约束名为uk_name。

③ 为性别添加默认约束(DEFAULT),默认名称为df_sex,其值为“男”。 ④ 为出生日期添加属性值约束(CHECK),约束名为ck_beday,其检查条件为:出生日期>?1988-1-1?。

(2)在stu_con表中插入如表1-1所示的数据记录。 表 1-1 在stu-con 表中插入的数据 学号 0009 0010 0011 0012

姓名 张小东 李梅 王强 王强

性别 女

出生日期 1989-4-6 1983-8-5 1988-9-10 1989-6-3

家庭住址

分析各约束在插入记录时所起的作用,查看插入记录后表中数据与所插入的数据是否一致?

(3)使用ALTER TABLE语句的DROP CONSTRAINT参数项在查询分析器中删除为stu_con表所建的约束。

10. 用企业管理器完成实验内容9的所有设置。

11. 在查询分析器中,为studentsdb数据库的grade表添加外键约束(FOREIGN KEY),要求将“学号”设置为外键,参照表为student_info,外键名为ufk_sid。

使用系统存储过程sp_help查看grade表的外键信息。

在grade表中插入表1-2所示记录,观察SQL Server会做何处理,为什么?如何解决所产生的问题?

表1-2

学号 0100

课程编号 0001

分数 78

使用查询分析器删除grade表的外键fk_sid。

四、实验思考

1. 在SQL Server 2000中,可采用哪些方法实现数据完整性? 2. 比较默认对象和默认约束的异同。

实验7 Transact-SQL程序设计

一、实验目的

1. 掌握Transact-SQL的数据类型、常量变量、表达式等概念。 2. 掌握程序中注释的基本概念和使用方法。 3. 掌握程序中的流程控制语句。

4. 掌握SQL Server 2000中常用函数的用法。

5. 掌握游标的概念和声明方法,以及使用游标进行数据的查询、修改、删除操作等。

二、实验准备

1. 了解程序中注释的语法格式。

2. 了解程序中的流程控制语句:IF-ELSE、CASE、WHILE等控制流语句。

3. 了解系统提供的常用数学函数、日期和时间函数、字符串函数和数据类型转换函数的用法。

4. 了解函数的使用方法。 5. 了解游标的使用方法。

三、实验内容和步骤

0. 创建studentsdb数据库及其相应表,并录入数据。 启动查询分析器,运行下面链接的代码即可。 创建数据库代码

1. 在查询分析器中,选择studentsdb数据库,输入以下代码。 DECLARE@stu name varchar(10) SELECT@stu name=姓名 FORM student info

WHERE 姓名 LIKE ?张%? SELECT@stu name

观察显示的结果,与student info表中数据进行比较,@stu name赋值的是SELECT结果集中的哪个数据

2. 定义int型局部变量@grademax、@grademin、@gradesum,在grade表中查找最高分、最低分和总分,分别赋给@grademax、@grademin和@gradesum,并显示。

DECLARE@grademax int,@gradesum,int

SELECT@grademax = max(分数),@grademin = min(分数),@gradesum = sum(分数) FROM grade

SELECT @ grademax ,@grademin,@gradesum

3. 使用SET命令将查询的结果数目赋值给int型局部变量@row。给下面代码中的划线处填上适当的内容,以完成上述操作。

DECLARE@row

SET =(SELECT COUNT(*)FROM grade) @rows —显示@rows的值

4. 以下代码在curriculum 表中插入新纪录: DECLARE @intCId int,@intErrorCode int

INSERT INTO curriculum(课程编号,课程名称,学分) VALUES(?0006?,?VB程序设计?,2)

SELECT@intCId = @ @identity,@intErrorCode = @@error SELECT@intCId, @intErrorCode

将该代码段连续执行两次,观察两次显示的信息及curriculum表中数据的变化,为什么 前后两次执行时显示的信息会不同?

5. 在studentsdb数据库的student info表中,以“性别”为分组条件,分别统计男生和女生人数。

6. 在grade表中,使用适当函数找出“高等数学”课程的最高分、最低分和平均分。 7. 定义一个datetime型局部变量@student,以存储当前日期。计算student info表 中的学生的年龄,并显示学生的姓名、年龄。在以下代码的划线部分填入适当内容,以实现上述功能。

DECLARE datetime

SET@student = —给@student赋值为当前日期 SELECT 姓名, (@student)-year(出生日期)AS年龄 FROM student info

8. 运行以下代码,写出运行结果。 DECLARE@ a int ,@ b int SET @a =168 SET @b = 73

SELECT @a & @b,@a| @b ,@a^@b

9. 在局部变量@stu id中存储了学号值。编写代码查询学号为0001的学生的各科平 均成绩,如果平均分>=60则显示“你的成绩及格了,恭喜你!!”,否则显示“你的成绩不及格”。

IF ((SELECT AVG(分数) FROM grade where 学号 = ?0001?)<60) PRINT ?你的成绩不及格? ELSE

PRINT ?你的成绩及格了,恭喜你!!? 10. 运行以下代码段,写出运行的结果。 DECLARE @counter int SET @ counter = 1 WHILE @ counter <10 BEGIN

SELECT ?@counter的值现在为:?+CONVERT(CHAR(2),@counter) SET @ counter = @ counter +1 END

11. 查询grade表。如果分数大于等于90,显示A;如果分数大于等于80小于90,显 示B;如果分数大于等于70小于80,显示C;如果分数大于等于60小于70,显示D;其他显示E。在以下代码的划线部分填入适当内容完成上述功能。 SELECT学号,分数,等级 = CASE

分数>=90 THEN ?A?

WHEN 分数>=80 AND 分数<90 ?B? WHEN 分数>=70 AND 分数<80 THEN ?C? WHEN 分数>=60 AND 分数<70 THEN ELSE ?E? END

FROM grade

12. 计算grade表的分数列的平均值。如果小于80,则分数增加其值的5%;如果分数 的最高值超过95,则终止该操作。在以下代码划线处填入适当的内容以完成上述功能。 WHILE (SELECT (分数)FROM grade)<80 BEGIN

UPDATE grade

SET 分数 = 分数*1.05

If (SELECT MAX(分数)FROM grade)> BREAK ELSE END

13. 编写代码计算并显示@ n = 1+2+3+...+20。

14. 编写代码计算并显示1~100之间的所有完全平方数。例如,81 = 92,则称81为完 全平方数。

15. 计算1~100以内的所有的素数。

16. 在studentsdb数据库中,使用游标查询数据。

(1) 打开查询分析器,声明一个stu cursor游标,要求返回student info表中性别 为“男”的学生记录,且该游标允许前后滚动和修改。

(2) 打开stu cursor游标。 (3) 获取并显示所有数据。 (4) 关闭该游标。 17. 使用游标修改数据。 (1) 打开stu cursor游标。

(2) 将姓马的男同学的出生日期的年份加1。 (3) 关闭stu cursor。

18. 声明游标变量@stu c,使之关联stu cursor游标,利用stu c查询年龄在6~9 月份出生的学生信息。

19. 使用系统存储过程sp cursor list显示在当前作用域内的游标及其属性。

四、实验思考

1. 使用游标对数据库的表进行删除和修改等操作。 2. 流程控制语句与其他编程语言提供的语句有何差别? 3. 区分局部变量与全局变量的不同,思考全局变量的用处。


数据库实验书(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:亚麻酸健脑益智最管用

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: