第八章 Transact-SQL语言 |
结构化查询语言SQL:(SQL)是ANSI和ISO定义的标准,T-SQL是microsoft公司对sql标准的一个实现。
T-sql语言:T-sql语言是sql(结构化查询语言的增强版本),与多种ANSISQL标准兼容,而且在标准的基础上还进行了许多扩展。T-sql代码已成为sql server 的核心,T-sql在关系数据库管理系统中实现数据的检索,操纵和添加功能。
分类:在microsoft sql server 系统中,T-sql可以创建,维护,保护数据库对象,并且可以 操作对象中的数据,所以T-sql语言是一种完整的语言。根据T-sql语言的执行功能特点,可以将T-sql语言分为基本三类:
数据定义语言(DDL):create database,create table,drop table ,atler table 等对数据库对象的添加删除修改等
数据操纵语言(DML):update,insert,delete,select 对数据的增删查改
数据控制语言(DCL):控制数据库的访问权限与安全
其他常用类型:
事务管理语言
流程控制语言:循环结构,选择,分支等
附加的语言元素:定义变量常量等
常量与变量(附加的语言元素)
常量:具体的值,不需要声明,1就是一个int整形的常量,张三这个名字就是一个字符串的常量
变量:全局变量,系统中已经存在,不能自己声明
局部变量,用户根据需要自己声明
局部变量 声明方法: declare @变量名 变量类型
给变量赋值:
方法一:set @变量名=表达式
方法二:select @变量名=表达式
declare @name varchar(50)
select @name='张三'
select @name
declare @name varchar(50)
set @name='张三'
select @name
运算符
算数运算符:+,-,,/,%(除数取余)
比较运算符:=,<,>,<=,>=,<>(不等于),!=(不等于),!<(不小于),!>(不大于)
逻辑运算符:
位运算符
其他运算符
赋值运算符:=
连接运算符:+
一元运算符:+(数值为正),-(数值为负),~(返回数字的逻辑非)
表达式:一个复杂的式子是一个表达式,一个常量一个变量也是一个表达式
注释:在数据库编程中添加注释(存储过程,变量等),养成良好的编程习惯
注释是程序代码中不被执行的文本字符串,用于对代码进行说明或暂时用来进行诊断的部分语句,一般的,注释主要描述程序名称,作者名称,变量名称,代码更改日期,算法描述等。
在mircosoft sql server 2008系统中,支持两种注释方式,1.双连号(–)注释方式 2.正斜杠星号字符(/…*/)
为单行代码添加注释
declare @name varchar(50) --声明姓名变量字符串
为多行代码添加注释
流程控制语句:控制T-sql语句的执行顺序
当为一条语句时,可加可不加begin…end,但是当语句不止一句时,需要使用begin end 语句块
declare @num int
select @num=avg(分数) from 成绩信息
where 考试编号='801' and 课程编号='2'
if @num>80
begin
print '这门课老师教的非常成功!'
end
else
print'这个老师教学方法需要改进!'
下列代码为多个if else嵌套的流程控制语句
declare @num int
select @num=avg(分数) from 成绩信息 where 考试编号='801' and 课程编号='2'
if @num>=60
begin
if @num<70
print'成绩刚刚及格,还需要继续努力!'
else if @num<80
print '成绩中等!'
else if @num<90
print '成绩良好!’
else print '成绩优秀,希望把经验与大家分享!'
end
else print'这个老师教学方法需要改进!'
case语句应用:根据所任职务添加新的一列员工职称,给员工职称赋值
select 员工姓名,所任职务,员工职称=
case 所任职务
when '经理' then '高级职称'
when ‘主管' then ’中级职称'
when ‘职员' then '初级职称'
else '其他职称'
end
from 新员工信息
while循环语句
waitfor延迟语句
有两种书写方式:
方法一:
Waitfor delay ‘00:00:05’ --5s之后执行下面的语句
Exec sp_help --执行系统存储过程
方法二:
Waitfor time ‘17:09:06’–指定具体的时间执行下面的语句命令
Exec sp_help --执行系统存储过程
select getdate() 该语句可以获得当前系统的时间
Go to 跳转语句:可以定义一些标签,通过if判断跳转到这些指定的标签
declare @counter int;
set @counter=1
while @counter<10
begin
print @counter
set @counter=@counter+1
if @counter=4 goto branch_one --jumps to the first branch.
if @counter=5 goto branch_two --this will never execute
end
Branch_one:
print 'jumping to branch one.'
goto branch_three
brahch_two:
print 'jumping to branch two.'
branch_three:
print 'jumping to branch three.'
错误处理语句(错误捕捉)
算数运算符
ABS:返回数值表达式的绝对值
EXP:返回指定表达式以e为底的指数
CEILING:返回大于或等于数值表达式的最小整数
FLOOR:返回小于或等于数值表达式的最大整数
LN:返回数值表达式的自然对数
LOG:返回数值表达式以10为底的对数
POWER:返回对数值表达式及进行幂运算的结果
ROUND:返回舍入到指定长度或精度的数值表达式
SIGN:返回数值表达式的正好(+)负号(-)或零(0)
SQUARE:返回数值表达式的平方
SQRT:返回数值表达式的平方根
declare @i float,@j int,@a decimal(18,2)
set @i=-12.2324
set @j=100
print abs(@i)
print round(abs(@i),2)
print ceiling(round(abs(@i),2)) --对上述求出的结果12.23,求出大于或等于它的最小整数
print floor(abs(round(@i,2))) --对上述求出的结果12.23,求出小于或等于它的最大整数
print power (@j,2) --对@j求2次幂,power是对数值表达式进行幂运算
print square (@j) --对@j求平方,只能求二次幂运算
print power (@j,0.5) --对@j进行1/2次幂运算
print sqrt(@j) --对@进行开方运算
字符串函数
下列代码执行结果为104,为h的ascii码值
declare @str nvarchar(50)
set @str='hello world'
print ascii(@str)
等同于下列的代码
print ascii('h')
下列代码返回指定的ascii码值对应的ascii代码的字符,语句执行结果为h
print char(104)
left函数从左边开始截取,截取5个字符,执行结果返回hello
declare @str nvarchar(50)
set @str='hello world'
print right (@str,5)
right函数从右边开始截取,截取5个,下列执行结果为orld!
declare @str nvarchar(50)
set @str='hello world!'
print right(@str,5)
substring(@string,从第几个字符开始,截取几个字符)
字符串函数
1.charindex()函数,返回字符串中某个指定的字符串出现的开始位置
charindex(所要查找的字符表达式,表达式),如果没有发现子串,则返回0值,此函数不能用于text和image数据类型
2.patindex()返回字符串中某个指定的子串出现的开始位置
patindex(%子串%,表达式)其中子串表达式前后必须要有%,否则返回值为0,与第一个函数不同的是,patindex函数的子串中可以使用通配符,且此函数可用于char,varchar和text数据类型
下列执行结果为3,子字符串分公司在@str1字符串中最先出现的位置为3
declare @str1 nvarchar(20)
set @str1='上海分公司财务经理'
print charinx('分公司',@str1)
聚合函数:AVG,COUNT,MAX,MIN,SUM
select avg(分数) as 平均分,count(分数) as 总人数, sum(分数) as 总体分数
from 成绩信息
where 考试编号='0801' and 课程编号='2
select max(分数) as 最高分,mint(分数) as 最低分
from 成绩信息
where 考试编号='0801' and 课程编号='2
日期和时间函数
1.dateadd:返回给指定日期加上一个时间间隔后的新的datetime值
2.datediff:返回跨两个指定日期的日期边界数和时间边界数
3.datename:返回标识指定日期的指定日期部分的字符串
4.datepart:返回标识指定日期指定日期部分的整数
5.day:返回一个整数,表示指定日期的天的部分
6.getdate:以datetime值的sql server2008标准内部格式返回当前系统日期和时间
7.getutcdate:返回标识当前的UTC时间
8.month:返回表示指定日期的"月"部分的整数
8.year:返回表示指定日期的年份的整数