SQL 编程

时间:2021-05-19 04:27:50

用SQL编写程序首先我们要了解SQL的一些编程方法

1.使用变量

变量:是可以存储数据值的对象,可以使用局部变量向SQL语句专递数据.

(1)局部变量

T-SQL中,局部变量的名称必须以标记@作为前缀.

声明局部变量的语法如下:

语法

declare @variable_name DateType

其中,variable_name 为局部变量的名称,DateType为数据类型.

例如:

Declare @name varchar(8)

Declare @number int

局部变量的赋值有两种方法:使用SET语句和SELECT语句

语法

set @variable_name = value

或者

select @variable_name = value

/*--查找张三的信息--*/
declare @name varchar(8)
set @name = '张三'
select StudentNo, StudentName, BornDate,Address
from Student
where Studentname = @name /*--查找与张三学号相邻的学生信息--*/
declare @StudentNo int
--使用 select 赋值
selece @StudentNo = StudentNo from Student
where StudentName = @name
select StudentNo, StudentName, BornDate,Address
from Student
where (StudentNo = @StudentNo+1) or (StudentNo = @StudentNo-1)
GO

在T-SQL语言中,为局部变量赋值的语句有SET语句和SELECT语句

下表是set语句和select语句的区别

  set select
同时对多个变量赋值 不支持 支持
表达式返回多个时 出错 将返回的最后一个值赋给变量
表达式未返回值时 变量被赋值为null 变量保持原值
下面代码体现了set语句和select语句在使用上不同.
Declare @Addr nvarchar(100), @name nvarchar(100)

Set @addr='', @name='张三'
Select @addr='北京', @name='张三' set@addr = (select address from Student)
Select @addrc = address from Student Set @addr = (Select address from Student where 1<0)
--查询无结果时,@addr被赋值为null
select @addr='北京'
select @address = Address from Student where 1<0
--查询无结果时,@addr保持原值

全局变量

SQL Server 中的所有全局变量都使用两个@符号作为前缀

最重要的五个全局变量

变量 含义
@@error 最后一个T-SQL错误的错误号
@@identity 最后一次插入的标识值
@@powcount 受上一个SQL语句影响的行数
@@servername 本地服务器名称
@@version SQL Server 版本信息

输出语句

语法

print 局部变量或字符串

select 局部变量as自定义列名

print '服务器名称:' + @@servername
print 'SQL Server的版本' +@@version
select @@servername as '服务器名称'
server @@version as 'SQL Server的版本'

局部变量

01.语法

Declare @age int

--赋值

Set @age=20

逻辑控制语句

(1)begin-end语句

语法

begin

语句或语句块

end

作用类似于C#中的 ‘{}‘

(2)if-else语句

语法

if(条件)

语句或语句块1

else

语句或语句块2

declare @avg int
select @avg= AVG(studentresult) from Result,Subject
where Result.SubjectId=Subject.SubjectId
and ExamDate>='2013-08-09'
and ExamDate<'2013-08-10'
and Subject.SubjectName='oop' --02.判定:>=70 显示优秀,同时显示分数最高的三个人的分数
if(@avg>=70)
begin
print '优秀'
--显示前名成绩 当天 oop
select top 3 * from Result,Subject
where result.SubjectId=Subject.SubjectId
and ExamDate>='2013-08-09'
and ExamDate <'2013-08-10'
and SubjectName='oop'
--降序排列desc
order by StudentResult desc end
else
begin
print '较差'
--显示前名成绩 当天 oop
select top 3 * from Result,Subject
where result.SubjectId=Subject.SubjectId
and ExamDate>='2013-08-09'
and ExamDate <'2013-08-10'
and SubjectName='oop'
--降序排列desc
order by StudentResult asc
end

(3)while循环语句

语法

while(条件)

  begin

    语句或语句块

  [brwak | continue]

end

(4)case多分支语句

case

  when 条件1 then 结果 1

  when 条件2 then 结果2

  [else 其他结果]

end

declare @date datetime
select @date = max(Examdate) from result
inner join Subjiect on result.SubjectNo=Subjiect.SubjiectNo
where SubjectName='java logic' select 学号=StudentNO, 成绩= case
when StudentResult >90 then 'A'
when StudentResult >80 then 'B'
when StudentResult >80 then 'C'
when StudentResult >80 then 'D'
else 'A'
end
from result
inner join Subjiect on result.SubjectNo=Subjiect.SubjiectNo
where SubjectName='java logic'