什么是T-SQL?
T-SQL
-
SQL 程式设计语言的增强版,它是用来让应用程式与 SQL Server 沟通的主要语言。T-SQL 提供标准 SQL的DDL 和 DML 功能,加上延伸的函数、系统预存程序以及程式设计结构(例如 IF 和 WHILE)让程式设计更有弹性。
案例:
--1.显示李文才的左右同桌(stu)
declare @seat int
select @seat=stuSeat from stu where stuName='李文才'
select * from stu where stuSeat in
(@seat-1,@seat+1)
--2.统计并显示本班笔试平均分,如果平均分在70以上
--显示“成绩优秀“,并显示前三名学员的考试信息;
--如果在70以下,显示“本班成绩较差“,
--并显示后三名学员的考试信息 。(exam)
--select * from exam
declare @avgScore int
select @avgScore=avg(writtenExam) from exam
if @avgScore>70
begin
print '成绩优秀'
select top 3 * from exam order by writtenExam desc
end
else
begin
print '本班成绩较差'
select top 3 * from exam order by writtenExam
end
--3.本次考试成绩较差,假定要提分,
--确保每人笔试都通过。提分规则很简单,
--先每人都加2分,看是否都通过,
--如果没有全部通过,每人再加2分,再看是否都通过,
--如此反复提分,直到所有人都通过为止 。
--先查最低的成绩,判断>60,循环加分
select * from exam
update exam set writtenExam=writtenExam-5
declare @num int
select @num=min(writtenExam) from exam
while(@num<60)
begin
update exam set writtenExam=writtenExam+2 where writtenExam<=98
select @num=min(writtenExam) from exam
end
--第二种方式
declare @num int
while (1=1)
begin
select @num=min(writtenExam) from exam
if @num<60
update exam set writtenExam=writtenExam+2 where writtenExam<=98
else
break
end
--4.采用美国的ABCDE五级打分制来显示笔试成绩。
-- A级: 90分以上
-- B级: 80-89分
-- C级: 70-79分
-- D级: 60-69分
-- E级: 60分以下
select examno,stuNo,writtenExam,评级 =
case when writtenExam>90 then 'A'
when writtenExam>80 then 'B'
when writtenExam>70 then 'C'
when writtenExam>60 then 'D'
else 'E'
end
from exam
--5.请根据平均分和下面的评分规则,编写T-SQL语句查询学员的成 绩,如上图所示。
-- 优 :90分以上
-- 良 :80-89分
-- 中 :70-79分
-- 差 :60-69分
-- 不及格 :60分以下
select examno,stuNo,(writtenExam+labExam)/2,评级 =
case when (writtenExam+labExam)/2>90 then 'A'
when (writtenExam+labExam)/2>80 then 'B'
when (writtenExam+labExam)/2>70 then 'C'
when (writtenExam+labExam)/2>60 then 'D'
else 'E'
end
from exam
--6.则根据如下规则对机试成绩进行反复加分,
--直到平均分超过85分为止。请编写T-SQL语句实现。
--90分以上: 不加分
--80-89分: 加1分
--70-79分: 加2分
--60-69分: 加3分
--60分以下: 加5分
select * from exam
declare @avgScore int
select @avgScore=avg(labExam) from exam
while @avgScore<85
begin
print '平均分:'+convert(varchar(20),@avgScore)
update exam set labExam=labExam+1 where labExam between 80 and 89
update exam set labExam=labExam+2 where labExam between 70 and 79
update exam set labExam=labExam+3 where labExam between 60 and 69
update exam set labExam=labExam+5 where labExam<60
select @avgScore=avg(labExam) from exam
end
select * from exam