我的第一篇论文
变量:变量是可以存储数据值的对象,可以用局部变量向SQL语句传递
局部变量:局部变量的名称必须以标记@最为前缀
declare @variablea_name DataType
其中,variable_name为局部变量的名称,DataType为数据类型
变量的赋值有两个方法:SET或SELECT
set @variable_name =value
或
select @variable_name=value
问题1:
根据学号查找‘李文才’的信息以及与‘李文才’的学号响铃的学生的信息
/*--查找李文才的信息--*/
declare @name varchar(8) --学生姓名
set @name='李文才' --使用Set赋值
select StudentNo,StudentName,BornDate,Address From Student
where StudentName=@name
/*--查找与李文才相邻的学生的信息--*/
declare @StudentNo int --学号
select @StudentNo=StudentNo From Student --使用select赋值
where StudentName=@name
Select StudentNo,StudentName,BornDate,Address From Student
where (StudentNo=@StudentNo+1) or (StudentNo=@Student-1)
全局变量:
@@error 最后一个T-SQL错误的错误号
@@identty 最后一次插入的标识值
@@rowcount 可以常见的,同时连接的最大数目
@@servername 本地服务器的名称
@@version SQL Server的版本信息
Print 局部变量或字符串
Select 局部变量 AS 自定义列名
数据类型的转换
CAST()和CONVERT()函数
与C#语言相似,在T-SQL语言中,数据类型的转换也分为隐式转换和显示转换
Cast(表达式 AS 数据类型)
Convert(数据类型【(长度)】,表达式【,样式】)
逻辑控制语句
Begin-End语句
(Begin-End语句将多个T-SQL语句定义成一个语句块,把每个语句块视为一个单元)
Begin
语句或语句块
End
if-else条件语句
if(条件)
语句或语句块1
else
语句或语句块2
(如果有多条语句,则需要与Begin-End结合使用,表示一个完整的语句块)
if(条件)
Begin
语句1
语句2
.......
end
else
......
问题2:
(
统计并显示2013-08-09 的oop考试平均分
如果平均分在70分以上,显示“考试成绩优秀”,并显示前三名学生的考试信息
如果在以下,显示“考试成绩较差”,并显示后三名学生的考试信息
)
declare @subid int
select @subid=SubjectId from Subject
where subjectname='oop'
declare @avg int
--定义一个变量,保存平均分
--如何求2013-08-09 oop 平均分
select @avg=AVG(StudentResult) from result
where examdate>='2013-08-09' and examdate<'2013-08-10'
and subjectid=@subid
--判定@avg和的关系
if(@avg>=70)
begin
--01.打印成绩优秀
print '成绩优秀'
--02.显示前3名学生成绩信息
select top 3 studentno,studentresult from result
where examdate>='2013-08-09' and examdate<'2013-08-10'
and subjectid=@subid
order by studentresult desc
end
else
begin
--打印成绩良好
print '良好'
--显示后3名学生成绩
select top 3 studentno,studentresult from result
where examdate>='2013-08-09' and examdate<'2013-08-10'
and subjectid=@subid
order by studentresult asc
End
While循环语句
(在SQL 中,只有while一种循环,没有do-while和for循环)
while(条件)
begin
语句或语句块
【break|continue】
end
问题3:
求1到100之间的偶数和
declare @sum int
set @sum=0
declare @num int
set @num=1
while(@num<=100)
begin
if(@num%2=0)
begin
set @sum+=@num
end
set @num+=1
end
print @sum
问题4:
(检查学生“oop”课最近一次考试是否有不及格(60分及格)的学生,如有,每人加2分,高于95分的学生不再加分,直至所有学生这次考试成绩均及格)
declare @subid int
select @subid=subjectid from subject
where subjectname='oop'
declare @mydate datetime
select @mydate=max(examdate) from result
where subjectid=@subid
declare @num int
select @num=count(1) from result
where subjectid=@subid
and examdate=@mydate
and studentresult<70
while(@num>0)
begin
update result set studentresult+=2
where studentresult<95
and subjectid=@subid
and examdate=@mydate
select @num=count(1) from result
where subjectid=@subid
and examdate=@mydate
and studentresult<70
print @num
end
select * from result
order by subjectid,examdate
case多分支语句
case-end语句计算一组条件表达式,并返回其中一个符合条件的结果
case
when 条件一 then 结果一
when 条件二 then 结果二
when 条件三 then 结果三
......
end
问题五:(采用美国的A到E五级打分制来显示学生'oop'课程最近一次考试成绩)
(
A级: 90分以上
B级:80-分
C级: 70-分
D级:60-分
E级:60分以下
)
declare @subid int
declare @maxdate datetime
select @subid=subjectid
from subject
where subjectname='oop'
select @maxdate=max(examdate)
from result
where subjectid=@subid
select studentname,等级=
case
when studentresult>=90 then 'A'
when studentresult>=80 then 'B'
when studentresult>=70 then 'C'
when studentresult>=60 then 'D'
else 'E'
end
from student,result
where student.StudentNo=result.StudentNo
and subjectid=@subid
and examdate=@maxdate