数据库编程
T-SQL编程基础知识
标识符
- 标识符分类
常规标识符(严格遵守标识符格式规则)
界定标识符(引号”或方括号[]) - 标识符格式规则
字母或_、@、#开头的字母数字或_、@、$序列
不与保留字相同
长度小于128
不符合规则的标识符必须加以界定(双引号””或方括号[])
注释语句
注释语句是对程序代码的说明或暂时禁用,是程序代码中不编译执行的语句
单行注释 –
例: --求‘3-105’课程的平均分
多行注释 /**/
例: /* 作者:
创建时间: */
数据类型
整数数据、字符数据、货币数据、日期和时间数据、二进制字符串等
变量
局部变量
局部变量是用户定义,必须以@开头,在程序内声明,并只能在该程序内使用
(1)局部变量的声明
DECLARE @<局部变量名> <数据类型>[,…n]
(2)局部变量的赋值
SET|SELECT @<局部变量名>=<表达式>
(3)局部变量的显示
SELECT|PRINT @<局部变量名>
SET 、SELECT赋值的区别
SET赋值语句一般用户赋给变量指定的数据变量
SELECT赋值语句一般用于表中查询数据,当查询的记录多于一条,将把最后一条记录的值赋给变量
SET一次只能赋值一个变量
SELECT可以一次赋值多个变量
SELECT @a=1,@b=2
例1:创建一个@myvar 变量,然后将一个字符串值放在变量中,最后输出 @myvar 变量的值
declare @mychar char(20)
select @mychar='hello sql'
-- set @mychar='hello sql'也行
select @mychar
全局变量
全局变量是SQL Server系统内部使用的变量,以@@开头
全局变量不是由用户的程序定义的,它们是在服务器级定义的
用户只能使用预先定义的全局变量
例3 :用全局变量查看SQL Server的版本、当前所使用的SQL Server服务器的名称以及所使用的服务名称等信息
print '目前所用SQL Server的版本信息如下:'
print @@VERSION
print '目前SQL Server服务器名称为:'+@@SERVERNAME
print '目前所用服务器为:'+@@SERVICENAME
运算符
SQL Server 的运算符和其他高级语言类似,用于指定要在一个或多个表达式中执行的操作,将变量、常量和函数连接起来
流程控制语句
BEGIN 和 END标记一个程序语句块的开始和结束。它经常与IF…ELSE和WHILE 循环一起使用。
BEGIN
语句1
语句2
语句3
……
END
选择结构
IF ELSE
IF…ELSE语句用来判断当某一条件成立时执行某段程序,条件不成立时执行另一段程序。其中,ELSE子句是可选的, SQL Server允许嵌套使用IF…ELSE语句,而且嵌套层数没有限制
语法格式
IF <布尔表达式>
<SQL语句>|<语句块>
[ELSE
<SQL语句>|<语句块>]
IF 条件
BEGIN
语句块1
END
[ELSE
BEGIN
语句块2
END]
例4:查找有没有学号为202015120的学生,有则显示学生信息,没有显式没找到
if exists(select * from student where sno='2020015120')
begin
select * from student where sno='2020015120'
end
else
print'没找着!'
Case语句
CASE语句可以计算多个条件式,并将其中一个符合条件的结果表达式返回。
CASE 表达式
WHEN 表达式的值1 THEN 返回表达式1
WHEN 表达式的值2 THEN 返回表达式2
…
ELSE 返回表达式n
END
例5:从学生表STUDENT中,选取SNO,SSEX,如果SSEX为‘男’则输出‘M’,如果为‘女’,则输出‘F’
select sno,ssex=
case ssex
when '男' then 'M'
when '女' then 'F'
end
from student
循环结构
WHILE
设置重复执行 SQL 语句或语句块的条件。只要指定的条件为真,就重复执行语句。可以使用 BREAK 和 CONTINUE 关键字在循环内部控制 WHILE 循环中语句的执行。
WHILE 逻辑表达式
BEGIN
T-SQL语句组
[break]/终止整个语句的执行/
[continue]/结束一次循环体的执行/
END
例7: 求1 ~10的和
declare @x int,@sum int
select @x=0,@sum=0
while @x<10
begin
set @x=@x+1
set @sum=@sum+@x
print 'sum='+convert(char(2),@sum)--类型转换函数convert
end
例8 打印1,2,3,4
DECLARE @x int
SELECT @x=1
WHILE @x<=10
BEGIN
IF @x=5
BREAK
ELSE
PRINT CONVERT(char,@ x)
SELECT @x=@x+1
END
例9 打印1~5之间的所有奇数
declare @x int
select @x=0
while @x<=5
begin
select @x=@x+1
if @x%2=0
continue
print convert(char,@x)
end
等待语句
等待语句挂起一个程序中语句的执行,直到指定的某一时间点到来或在一定的时间间断之后才继续执行。
语法格式
WAITFOR DELAY '<时间间隔>‘ | TIME ‘<时间>’
其中,时间间隔以及时间均为datetime类型,格式为“hh:mm:ss”。
DELAY指定在多长时间后执行语句,最长为24小时。
TIME指定运行批处理、存储过程或事务的时间,在time内不能指定日期
例10:设置等待一小时后执行查询
begin
waitfor delay '1:00:00'
select * from student
end
例11:设置到十点整执行查询
begin
waitfor time '10:00:00'
select * from student
end
RETURN语句
RETURN语句用于无条件地终止一个查询、存储过程或者批处理,位于RETURN语句之后的程序将不会被执行
系统函数
日期和时间函数
例12:使用日期时间函数计算自己现在的年龄
select '年龄'=datediff(YY,'1999-05-01',getdate())
取子串函数
SUBSTRING (字符串,int pos,int length)
函数返回的子串是从字符串左边第pos个字符起length个字符的部分。
SUBSTRING()函数不能用于TEXT 和IMAGE 数据类型
数据类型转换函数:CONVERT和CAST
- CAST函数允许把一个数据类型强制转换为另一种数据类型,其语法形式为:
CAST( expression AS data_type ) - CONVERT函数允许用户把表达式从一种数据类型转换成另一种数据类型,还允许把日期转换成不同的样式,其语法形式为:
CONVERT (data_type[(length)],expression [,style])
例子:查询学生基本信息表STUDENT中的学号、姓名、年龄,并且将这三个字段通过“+”运算符连接显示在查询结果中
SELECT SNO+SNAME+CAST(SAGE AS CHAR(2))
FROM STUDENT