我的第一篇论文

变量:变量是可以存储数据值的对象,可以用局部变量向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-whilefor循环)

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

posted @ 2016-03-07 17:35  吴松~  阅读(240)  评论(0编辑  收藏  举报