- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
select@grademax=max(分数),@grademin=min(分数),@gradesum=sum(分数)
from成绩表
where课程编号='0002'
select@grademaxas最高分,@grademinas最低分,@gradesumas总分
结果如下:
3.使用SET命令将查询结果集记录数目赋值给int型局部变量@row。给下面代码中的划线处填上适当的内容,以完成上述操作。
FROM学生表
WHERE姓名LIKE '陈%‘
运行结果如下:
9.请用多行注释将下列命令行所实现的功能予以注释(填入括号内)。
(/*将所有出生年月在1980年以后(不包含1980年)的学生的姓名,性别,出生年月,家庭地址列出来*/)
SELECT姓名,性别,出生年月,家庭地址
FROM学生表
WHERE YEAR(出生年月)>1980
两都所用到的地方不一样。
四、实验思考
1.编写代码计算并显示@n=1+2+3+…+20。
程序代码如下:
declare@nint,@countint
set@count=0
set@n=0
while(@count<=20)
begin
set@count=@count+1
set@n=@n+@count
end
select@nas总和
运行结果:
WHILE(SELECTAVG(分数)FROM成绩表)<80
BEGIN
UPDATE成绩表
SET分数=分数+分数*0.05
IF(SELECTMAX(分数)FROM成绩表)>95
BREAK
ELSE
CONTINUE
END
运行结果如下:
(添加selectAVG(分数),MAX(分数)from成绩表语句验证结果的正确性)
专业
班级
学号
姓名
实验名称
Transact-SQL程序设计
实验目的
1.掌握分支与循环结构的使用
2.掌握游标Hale Waihona Puke Baidu使用
3.掌握SQL Server全局变量和局部变量特点
4.掌握流控制语句if…else基本语法
实验内容及过程
1.在查询分析器中,选择studentsdb数据库,在学生表中查找姓“张”的学生,并将该生姓名赋于变量@stu_name。
select@stu_nameas姓名
结果如下:
2.定义int型局部变量@grademax、@grademin、@gradesum,在成绩表中查找课程编号是“C002”课程的最高分、最低分和总分,分别赋给@grademax、@grademin和@gradesum,并显示。
代码如下:
declare@grademaxint,@grademinint,@gradesumint
SELECT @intCId=@@identity,@intErrorCode=@@error
SELECT @intCId,@intErrorCode
将该代码段连续执行两次,观察两次显示的信息及课程表中数据的变化,为什么前后两次执行时显示的信息会不同?
答:前后二次执行显示的结果分别如下:
前后二次课程表中数据的变化:
print'你的成绩不及格!'
else
print'你的成绩及格了,恭喜你!'
结果如下:
11.运行以下代码段,写出运行的结果。
DECLARE@counterint
SET@counter=1
while@counter<10
begin
select'@counter的值现在为:'+CONVERT(CHAR(2),@counter)
前后二次出现不同的原因:
@@identity表示上次使用insert操作中使用的identity的值,@@error表示前一条SQL语句报告的错误号,当第一次执行插入语句后,在课程表中就添加了新数据,当第二次执行相同的操作时,由于已经存在了相同的记录,系统将会报错,这样就会将错误号赋值给@@error,@@error又将错误号赋值给intErrorCode,所以导致前后二次出现的结果不同。
select@mansumas男生人数,@womansumas女生人数
结果如下:
6.在成绩表中,使用适当函数找出“高等数学”课程的最高分、最低分和平均分,并分别赋予@grademax、@grademin、@gradesum。
代码如下:
declare@grademaxint,@grademinint,@gradesumint
运行结果如下:
10.在局部变量@stu_id记中存储了学号值。编写代码查询学号为0001的学生的各科平均成绩,如果平均分>=60则显示“你的成绩及格了,恭贺你!!”,否则显示“你的成绩不及格”。
代码如下:
declare@stu_idchar(4)
if((selectavg(分数)from成绩表where@stu_id='0001')<60)
select@grademax=max(分数),@grademin=min(分数),@gradesum=sum(分数)
from成绩表
where课程编号='0002'
select@grademaxas最高分,@grademinas最低分,@gradesumas总分
结果如下:
7.定义一个datetime型局部变量@studate,以存储当前日期。计算学生表中的学生的年龄,并显示学生的姓名、年龄。在以下代码的划线部分填人适当内容,以实现上述功能。
DECLARE@studatedatetime
SET @studate=getdate
SELECT姓名,year(getdate)-year(出生日期)AS年龄
FROM学生表
结果如下:
8.请用单行注释将下列命令行所实现的功能予以注释(填入括号内)。
(--将所有姓陈的同学的姓名和家庭地址列出来)
SELECT姓名,家庭地址
2.区分局部变量与全局变量的不同,思考全局变量的用处。
答:局部变量就是在当前批处理中有效的变量,批处理完成就删掉。全局变量就是在整个MSSQL中都可以访问到的变量。全局变量的作用:全局变量通常存储一些SQL Server的配置设定值和统计数据。用户可以在程序中用全局变量来测试系统的设定值或者是Transact-SQL命令执行后的状态值。
实验总结
access--中小型数据库开发系统,内嵌vba编程语言,面向对象编程
excel--数据表格处理系统,编程能力有限.
access是数据库管理软件,内含的是数据库(基本对象),一个数据库包含多张表主要用于开发系统,日常办公用起来不方便,他主要是做软件的后台的。
而excel只是一般的表格处理软件,主要用于一些日常的办公而已
(1)、首先查看姓张的学生有多少个
代码如下:
select姓名
from学生表
where姓名like'张%'
结果如下:
(2)、再选择要查看的学生,并将姓名赋给变量(本例选择第一个学生)
代码如下:
declare@stu_namevarchar(10)
select@stu_name=姓名
from学生表
where姓名like'张卫民'
5.在studentsdb数据库的学生表中,以“性别”为分组条件,分别统计男生和女生人数。
代码如下:
declare@mansumint,@womansumint
set@mansum=(selectcount(性别)from学生表where性别='男'groupby性别)
set@womansum=(selectcount(性别)from学生表where性别='女'groupby性别)
DECLARE @rowsint
SET@rows=(SELECT COUNT(*)FROM成绩表)
select@rows
结果如下:
4.以下代码在课程表中插入新记录:
DECLARE @intCId int,@intErrorCode int
INSERT INTO课程表(课程编号,课程名称,学分)
VALUES('0006','VB程序设计',2)
when分数>=80and分数<90then'良好'
when分数>=70and分数<80then'中等'
when分数>=60and分数<70then'及格'
else'不及格'
endas等级
from成绩表
结果如下:
13.计算grade表的分数列的平均值。如果小于80,则分数增加其值的5%;如果分数的最高值超过95,则终止该操作。在以下代码划线处填入适当的内容以完成上述功能。
set@counter=@counter+1
END
运行结果:
12.编写程序查询成绩表。如果分数大于等于90,显示优秀;如果分数大于等于80小于90显示良好;如果分数大于等于70小于80显示中等;如果分数大于等于60小于70显示及格,其他显示不及格。
代码如下:
select学号,分数,
case
when分数>=90then'优秀'