一、StudentInfo数据库已发给大家。其中包含两个表:stuInfo和stuMarks。
根据这个数据库完成下列各题:
1.编写T-SQL查找李文才的左右同桌 ? 分析:
第一步,找出“李文才“的座位号; 第二步,李文才的座位号加1或减1
/*--查找李文才的信息--*/
DECLARE @name varchar(8) --学员姓名 SET @name='李文才' --使用SET赋值
SELECT * FROM stuInfo WHERE stuName = @name /*--查找李文才的左右同桌--*/ DECLARE @seat int --座位号
SELECT @seat=stuSeat FROM stuInfo --使用SELECT赋值 WHERE stuName=@name SELECT * FROM stuInfo
WHERE (stuSeat = @seat+1) OR (stuSeat = @seat-1) GO
2. 统计并显示本班笔试平均分,如果平均分在70以上,显示“成绩优秀“,并显示前三名学员的考试信息;如果在70以下,显示“本班成绩较差“,并显示后三名学员的考试信息 。 分析:
第一步,统计平均成绩存入临时变量; 第二步,用IF-ELSE判断;
declare @myavg float
select @myavg=avg(writtenExam) from stuMarks --使用select赋值
print '本班的平均分:'+convert(varchar(5),@myavg) if (@myavg>70) begin
print '本班笔试成绩优秀!'
select top 3 * from stuMarks order by writtenExam desc end else
begin
print '本班笔试成绩优秀!'
select top 3 * from stuMarks order by writtenExam end go
3. 本次笔试成绩较差,假定要提分,确保每人笔试都通过。提分规则很简单,先每人都加2分,看是否都通过,如果没有全部通过,每人再加2分,再看是否都通过,如此反复提分,直到所有人都通过为止 。 分析:
第一步,统计没通过的人数 ; 第二步,如果有人没通过,加分; 第三步,循环判断。
declare @n int
while(1=1) --条件永远成立 begin
select @n=count(*) from stuMarks
where writtenExam<60 --统计不及格人数 if (@n>0)
update stuMarks set writtenExam=writtenExam+2 --每人加2分 else
break --退出循环 end
print '加分后的成绩如下:' select * from stuMarks
4. 请根据平均分和以下评分规则,编写T-SQL语句查询学员的成绩。
优 :90分以上 良 :80-89分
中 :70-79分 差 :60-69分 不及格 :60分以下
SELECT 考号=ExamNo,学号=stuNo,笔试=writtenExam,机试=labExam, 平均分=(writtenExam+labExam)/2, 等级= CASE
WHEN (writtenExam+labExam)/2<60 THEN '不及格'
WHEN (writtenExam+labExam)/2 BETWEEN 60 AND 69 THEN '差' WHEN (writtenExam+labExam)/2 BETWEEN 70 AND 79 THEN '中' WHEN (writtenExam+labExam)/2 BETWEEN 80 AND 89 THEN '良' ElSE '优' END
FROM stuMarks
二、 用T-SQL语句写一个求两个数的最大值的函数
create function max2( @par1 real , @par2 real) returns real as begin
declare @par real if @par1 > @par2
set @par = @par1 else
set @par = @par2; return @par end Go
三、P248(4)
declare @ssex char(2) declare Cur_XS cursor for
select 性别 from 学生表 for update of 年龄 open Cur_XS
fetch next from Cur_XS into @ssex while (@@fetch_status=0) begin
if (@ssex='女')
delete from 学生表 where current of Cur_XS else
update 学生表 set 年龄=年龄+1 where current of Cur_XS fetch next from Cur_XS into @ssex end
close Cur_XS
deallocate Cur_XS go
select * from 学生表 go