目录
一、 标识符
可以用做标识符的字符:
英文字符:A~Z或a~z,在SQL中是不用区别大小写的。
数字:0~9,但数字不得作为标识符的第一个字符。
特殊字符:_、#、@、$,但$不得作为标识符的第一个字符。
特殊语系的合法文字:例如中文文字也可以作为标识符的合法字符。小结:英文字母、数字、_、#、@、$或者汉字组成,不可以数字或$开头
(标识符不能是SQL的关键词,例如:“table”、“TABLE”、“select”、“SELECT”都不能作为标识符。 标识符中不能有空格符,或_、#、@、$之外的特殊符号。 标识符的长度不得超过128个字符长度。)
二、数据类型
三、 常量
字符型常量 如:‘abcde’
整型常量 如:11,70,1200等
实型常量 如:3.14,3.5等
日期型常量 如:6/25/83,may 110 2000等
货币常量 如:$1000 等
四、变量
(1)变量分类
局部变量(local variable,以 @为变量名称开头)
是由用户定义的变量,这些变量可以用来保存数值、字符串等数据
全局变量(global variable,@@为名称头)
是由系统提供及赋值,用来保存一些系统的信息。
(2)局部变量
(1)局部变量定义
DECLARE @VariableName Data_Type
说明:
一次可以声明多个变量;
局部变量在声明后均初始化为NULL。例1:声明一个长度为8个字符的变量id
declare @id char(8)
DECLARE @VAR1 CHAR(20),@VAR2 INT
(2)局部变量赋值
赋值格式一:
SET 变量名 = 表达式
说明:
变量名:是除 cursor、text、ntext 或 image 外的任何类型变量的名称。
表达式:是任何有效的 SQL Server 表达式
例2:
SET @VAR1 = 'AHJHFDSJF'
SET @VAR2 = 123赋值格式二:
SELECT 变量名 = 表达式或 SELECT子句
例3
SELECT @VAR1 = 'AHJHFDSJF'
SELECT @VAR2 = 123
例4、定义变量@vcity,并将pubs例库中,authors表中作者编号(au_id)
为“172-32-1176”的作者所在城市的(city)值赋予它。
SELECT @vcity = select city from authors
where au_id = ‘172-32-1176’
如果 SELECT 语句返回多个值,则将返回的最后一个值赋给变量。
如果 SELECT 语句没有返回行,变量将保留当前值。
eg:
declare @a Datetime,@b int,@x int --声明两个变量 set @a='2018-11-11' set @b=(select min(Credit) from Course) select @x=count(*) from Course; -- 少写一个select -- select或者print打印输出 select @a,@b print @x
![]()
select @a,@b ![]()
print @x
(3)全局变量
@@开头 主要用于存放sql server 工作状态信息
全局变量可以用select、print显示当前值
eg: select print混在一起执行 交界处断开不输出
select @@SERVERNAME --返回SQL服务器名称 select @@LANGUAGE --返回当前使用语言名 select @@VERSION --返回SQL服务器安装日期、版本和处理器类型 print APP_NAME() --返回当前会话应用程序 print USER_NAME() --返回用户数据库用户名 print GETDATE() --返回当前时间 -- 补:返回年份print DATENAME(YYYY,GETDATE()) 或 select DATENAME(YYYY,GETDATE())
上面数三个select的输出 一个输出一个表格 不方便复制 下面是3个print输出 纯文本方便复制
Microsoft SQL Server Management Studio - 查询
dbo
11 11 2018 6:44PM
五、 运算符
运算符用来执行列或变量间的数学运算或值的比较,SQL Server支持的运算符有:
算术运算符 +,-,*,/,%(取模)
比较运算符 =、>、<、>=、<=、<>(不等于)
字符串连接运算符 +
逻辑运算符 and(与)、 or(或) 、not(非)
位运算符 按位与(&)、或(| )、异或(^)、求反(~)
(位运算符在SQL中已经很少用到)
六、 函数
1、字符串函数
T-SQL提供了如下用于字符或字符串的函数
ASC II( )
返回字符串表达式最左面字符的ASC II码值
CHAR( )
把一个表示ASC II代码的数值转换成对应的字符
CHARINDEX( )
返回一个子串在字符串表达式中的起始位置
PATINDEX( )
返回一个子串在字符串表达式中的起始位置,在子串中可以使用通配符‘%’,这个函数可以用在TEXT、CHAR和VARCHAR类型的数据上
DIFFERENCE( )
返回两个字符串的匹配程度
SOUNDEX( )
返回两个字符串发音的匹配程度
LOWER( )
把大写字母转换成小写字母
UPPER( )
将小写字母转换成大写字母
LTRIM( )
删除字符串的前导空格
RTRIM( )
删除字符串的尾部空格
REPLICATE( )
重复一个字符表达式若干次
REVERSE( )
取字符串的逆序
SPACE( )
产生空格字符串
STR( )
将数值转换成字符串
STUFF( )
用一个子串按规定取代另一个子串
RIGHT( )
从字符的右部取子串
SUBSTRING( )
取子串函数
LEN()
字符串字符个数函数
LEFT()
取子串函数
RIGHT()
取子串函数
SUBSTRING()
取子串函数
SPACE(n)
n为int类型 返回n个空格组成的char字符串
UPPER()
函数将小写字符转换为大写字
LOWER()
函数则将大写字符转换为小写字符
LTRIM()
删除字符串的左部空格
RTRIM()
删除字符串的右部空格。
STR()
将数字数据转换成字符数据
2 数学函数
ABS( )
SIN ( )
COS( )
TAN( )
COT( )
ASIN( )
ACOS( )
绝对值函数
正弦函数
余弦函数
正切函数
余切函数
反正弦函数
反余弦函数
ATAN( )
CEILING( )
FLOOR( )
ROUND( )
DEGREES( )
RADIANS( )
EXP( )
反正切函数
向上取整函数
向下取整函数
四舍五入函数
将弧度转换成角度
将角度转换成弧度
指数函数
LOG( )
LOG 10( )
PI( )
POWER( )
SQRT( )
RAND( )
SIGN( )
自然对数函数
以10为底的对数函数
圆周率
乘方函数
平方根函数
产生一个随机数
返回+1、0或-1
返回整数值函数
CEILING与FLOOR函数都用于返回数值表达式的整数值,但返回的值不同。
乘方运算函数
POWER(数值表达式1,数值表达式2)
自然指数函数
语法:EXP(float表达式)
求指定的float表达式的自然指数值,返回float型的值。
平方根函数
语法:SQRT(float表达式)
求指定的float表达式的平方根,返回float型的值。
产生随机数函数
用于返回一个位于0和1之间的随机数。
语法:RAND(整数表达式)
整型表达式在这里起着产生随机数的起始值的作用。
四舍五入函数
语法:ROUND(数值表达式,整数)
该函数将数值表达式四舍五入成整数指定精度的形式。
在这里,整数可以是正数或负数。正数表示要进行运
算的位置在小数点后,反之要运算的位置在小数点前。
3 日期和时间函数
命令
格式
DATEADD( )
在一个日期值上加上个间隔,返回值仍是日期值
DATEDIFF( )
计算两个日期值之间的间隔
DATENAME( )
返回表示日期中某部分的字符串
DATEPART( )
返回表示日期中某部分的数值
GETDATE( )
返回系统日期和时间
返回当前的系统时间函数
GETDATE():返回当前的系统时间。
返回日期时间的指定部分函数
DATEPART和DATENAME函数都能返回给定日期的指定部分,如:年、月、日等。
eg:DATENAME(YYYY,GETDATE())获得年
改变数值后的日期时间函数
DATEADD函数在指定日期时间的基础上加一段时间,返回新的日期时间值。
Dateadd(datepart , number, date ) --差值转换为datepart日期元素的格式
求两日期时间之间的差值函数
DATEDIFF函数:返回开始日期和结束日期在给定日期部分上的差值。
datediff(datepart , startdate , enddate ) --差值转换为datepart日期元素的格式
4 类型转换函数
CAST和CONVERT函数能将某种数据类型的表达式显式转换为另一种数据类型
CAST和CONVERT提供相似的功能,但CONVERT功能更强一些。
CAST ( expression AS data_type )
CONVERT (data_type[(length)], expression [, style])
七 语句
1 定义语句块
2 返回客户端消息语句
3 条件判断语句
4 循环语句
5 其他语句
流程控制
1. BEGIN...END
2. IF…ELSE
3. WHILE、BREAK、CONTINUE
4. GOTO
5. RETURN
1 定义语句块
BEGIN…END表示一个区块,凡是在BEGIN与END之间的程序都属于用一个流程控制,通常都是与IF…ELSE或WHILE等一起使用,如果BEGIN…END中间只有一行程序,则可以省略BEGIN与END。
语法
BENGIN
Sql_statement1
Sql_statement2
...
END
注意:
Sq1_statement:是任何有效的T-SQL语句。
BEGIN…END语句块允许嵌套 。
2 Begin--End
eg : 查找cno='2'的课程,有则删除,没有提示没找到
If Exists(SELECT * from course where cno='2')
Begin
Delete course where cno='2'
Print '课程号为2的课程已删除!'
End
Else
Print '课程号为2的课程不存在!'
-- 运行结果:
(1 行受影响)
课程号为2的课程已删除!
注:delete Course where cno=1; 也可以删除记录 即可以省略from
3 IF…ELSE
Declare @var float
Select @var=(select sum(salary) from employees)
IF @var>10000
If @var<20000
Print '工资总和在10000到20000之间'
else
print '工资总和大于20000'
Else
print '工资总和小于10000'
4 循环语句 主要while循环 sql server很少使用for循环
Declare @i int, @sum int
Set @i=0
set @sum=0
While @i>=0
Begin
set @i=@i+1
if @i<=100
if (@i%2)=0
Continue
else
set @sum=@sum+@i
else
Begin
print '1到100之間的奇數和='+str(@sum)
break
End
End
--运行结果:
1到100之間的奇數和= 2500
5 其他语句
等待语句
该语句可以指定它以后的语句在某个时间间隔之后执行,或未来的某一时间执行。
语法:waitfor{DELAY‘time’|TIME‘time’} eg:waitfor delay '02:00' 延迟2小时
返回语句
RETURN用于从过程、批处理或语句块中无条件退出,不执行位于RETURN之后的语句。
无条件转移语句
在程序中执行到某个地方时,可以使用GOTO语句跳到另一个使用语句标号标识的地方继续执行。
语法:GOTO label
注:label是指向的语句标号。
八、批处理
1. 批处理:指包含一条或多条T - SQL语句的语句组,这组语句从应用程序一次性地发送到
SQL server服务器执行。
2. 执行单元:SQL server服务器将批处理语句编译成一个可执行单元,这种单元称为执行单元。
3. 若批处理中的某条语句编译出错,则无法执行。若运行出错,则视情况而定。
4. 书写批处理时,go语句作为批处理命令的结束标志,当编译器读取到go语句时,会把go语句前
的所有语句当作一个批处理,并将这些语句打包发送给服务器。go语句本身不是T - SQL语句
的的组成部分,只是一个表示批处理结束的前端指令。
注意:
1)create default , create rule , create trigger和create view等语句在同一个批处理中只能提交一个。
2)不能在删除一个对象之后,在同一批处理中再次引用这个对象。
3)不能把规则和默认值绑定到表字段或者自定义字段上之后,立即在同一批处理中使用它们。
4)不能定义一个check约束之后,立即在同一个批处理中使用。
5)不能修改表中一个字段名之后,立即在同一个批处理中引用这个新字段。
6)使用set语句设置的某些set选项不能应用于同一个批处理中的查询
7)若批处理中第一个语句是执行某个存储过程的execute语句,则execute关键字可以省略。
若该语句不是第一个语句,则必须写上。
eg:
use exp6
go
select * from student
go
creacte view view1 as
select * from studnet
where sno = '1'
go
select * from view1
go