SQL是关系型数据库的标准语言,几乎所有的关系型数据库都支持SQL。但SQL不支持流程控制,使用起来不太方便。
因此,大型关系型数据库在SQL基础上推出了结构化的SQL编程语言,如SQL Server 2012的Transact-SQL、Oracle 11g的PL/SQL。
全局变量不是由用户定义,而是由系统定义和维护。任何程序均可随时调用。
全局变量对用户是只读的,用户只能读取全局变量的值,而不能对他们进行修改或管理。
使用全局变量必须以@@
开头。
局部变量由用户自定义,作用范围有限。
DECLARE @变量名 变量类型,@变量名 变量类型,……
不能简单地使用变量名=变量值
的方式给变量赋值,必须使用SELECT
或者SET
命令。
如SELECT @变量名=变量值
或SET
单行注释:-- 注释内容
。
多行注释:/*注释内容*/
。
位或:|
位与:&
位异或:^
位反:~
AND
OR
NOT
ANY
SOME
ALL
BETWEEN...AND
IN
LIKE
EXISTS
=
<
>
>=
<=
<>
非SQL标准:!=
!<
!>
=
+
每个批处理中的所有语句要么被放在一起通过解析,要么没有一句能够执行。每两个GO之间的SQL语句为一个批处理单元。
每个批处理被单独地处理,一个批处理中的错误不会阻止另一个批处理的运行。
BEGIN...AND
用于包裹语句块。
BEGIN
语句
语句
语句
...
AND
如果不使用BEGIN...AND
包裹程序块,IF或ELSE中只能执行一条语句。IF...ELSE...可以嵌套。
IF 条件表达式
一条语句
[ELSE -- ELSE可选
一条语句
]
或
IF 条件表达式
BEGIN
多条语句
END
[ELSE -- ELSE可选
BEGIN
多条语句
END
]
-- 如果SELECT子查询结果不为空,那么执行多条语句1。若加NOT,则如果子查询结果为空,执行多条语句1。
IF [NOT] EXISTS 子查询
BEGIN
多条语句1
END
ELSE
BEGIN
多条语句2
END
两种使用方法。
①用CASE后的变量去匹配WHEN后的待匹配值,若没有ELSE语句且没有一个WHEN匹配,则返回NULL,否则返回THEN或ELSE后的值。
CASE 变量
WHEN 待匹配值1 THEN 值1
WHEN 待匹配值2 THEN 值2
[ELSE 值3] -- ELSE可选
END
②从前到后判断WHEN后面的条件表达式,若都为False且没有ELSE语句,返回NULL,否则返回THEN或ELSE后的值。
CASE
WHEN 条件表达式1 THEN 值1
WHEN 条件表达式2 THEN 值2
[ELSE 值3] -- ELSE可选
END
CASE语句可以嵌套到SQL语句中,如:
SELECT SNo,SName,isPass=
CASE
WHEN Grade >= 60 THEN ‘yes‘
ELSE ‘no‘
END
FROM SC
CASE常用于给变量赋值,多和SET
、SELECT
语句连用。
SET @Grade =
CASE
WHEN 条件表达式1 THEN 值1
WHEN 条件表达式2 THEN 值2
ELSE 值3
END
SELECT @Grade =
CASE
WHEN 条件表达式1 THEN 值1
WHEN 条件表达式2 THEN 值2
ELSE 值3
END
WHEN 条件表达式
BEGIN
多条语句
[BREAK] -- BREAK可选,与IF连用,退出整个循环
[CONTINUE] -- CONTINUE可选,与IF连用,跳过本次循环
END
-- DELAY表示等待1小时2分3秒后执行后面的语句。
WAITFOR DELAY ‘01:02:03‘
语句
-- TIME表示在1点2分3秒时刻执行后面的语句。
WAITFOR TIME ‘01:02:03‘
语句
标识符A:
语句
GOTO 标识符A
声明局部变量、游标变量、表变量。
执行存储过程。
向客户端返回字符串常量或字符串变量
给变量赋值,一次可以给多个变量赋值。
SELECT @a=1,@b=2,@c=7
给变量赋值,与SELECT不同的是,一次只能给一个变量赋值。
SET @a=1
SET @b=2
SET @c=7
选择数据库
USE StuDataBase
返回最左端字符的ASCII码值。
ASCII(‘A55Qeca‘)
则返回字符A的ASCII码值65
。
将ASCII码转字符,若大于255
,返回NULL
。
CHAR(65)
返回字符A
。
返回将字符串中所有大写字母转化为小写字母后的字符串,不是英文字母的字符不变。
返回将字符串中所有小写字母转化为大写字母后的字符串,不是英文字母的字符不变。
转化为字符串。
返回去掉左边的空格\去掉右边的空格的字符串。
返回从左边开始\到右边结束的子串。
LEFT(‘串‘,整数)
。整数表示结束的下标。下标从1开始计数。
LEFT(‘串‘,整数)
。整数表示开始的下标。下标从1开始计数。
CAST(表达式 AS 目标类型)
CONVERT(目标类型,表达式)
CONVERT(日期时间类型,表达式,表示日期格式的整数)
DAY()
、MONTH()
、 YEAR()
分别取时间的日期、月份、年份部分。
DATEADD(datepart,加的数值,原日期)
返回在原日期上加上某datepart后的日期,datepart可以是DAY、MONTH、YEAR、WEEK等。
DATEDIFF(datepart,日期1,日期2)
返回日期2减去日期1的差值。datepart可以是DAY、MONTH、YEAR、WEEK等。
DATEPART(datepart,日期)
返回日期的指定部分。datepart可以是DAY、MONTH、YEAR、WEEK等。
GETDATE()
返回当前日期和时间的DATETIME类型的值。
①标量值函数:
返回单个数据值的函数。
CREATE FUNCTION 函数名
(
[
@参数名 [AS] 参数类型 [=默认值] [READONLY], -- 若指定默认值,则不指定参数的值也能执行函数
[@参数名 [AS] 参数类型 [=默认值] [READONLY], -- 若指定READONLY,则函数中不可修改或更新参数
@参数名 [AS] 参数类型 [=默认值] [READONLY]
]
]
)
RETURNS 返回值类型
[WITH ENCRYPTION] -- 此选项表示函数定义的文本被加密,不能查看。
[AS] -- AS用于说明函数体,加不加都可以,类似DECLARE @A [AS] INT中AS加不加都可以
BEGIN
函数体
RETURN 表达式
END
②内联表函数
内联表函数没有函数体,返回table类型(结果集)。
CREATE FUNCTION 函数名
(
[
@参数名 [AS] 参数类型 [=默认值] [READONLY], -- 若指定默认值,则不指定参数的值也能执行函数
[@参数名 [AS] 参数类型 [=默认值] [READONLY], -- 若指定READONLY,则函数中不可修改或更新参数
@参数名 [AS] 参数类型 [=默认值] [READONLY]
]
]
)
RETURNS TABLE
[WITH ENCRYPTION] -- 此选项表示函数定义的文本被加密,不能查看。
[AS]
RETURN SELECT语句
③多语句表函数
有函数体,返回table类型(结果集)。
CREATE FUNCTION 函数名
(
[
@参数名 [AS] 参数类型 [=默认值] [READONLY], -- 若指定默认值,则不指定参数的值也能执行函数
[@参数名 [AS] 参数类型 [=默认值] [READONLY], -- 若指定READONLY,则函数中不可修改或更新参数
@参数名 [AS] 参数类型 [=默认值] [READONLY]
]
]
)
RETURNS @返回表变量名 TABLE (表定义)
[WITH ENCRYPTION] -- 此选项表示函数定义的文本被加密,不能查看。
[AS]
BEGIN
函数体
RETURN -- RETURN后不加变量名,RETURNS后已经指明了返回的表变量,在函数体中可以给表变量赋值
AND
原文:https://www.cnblogs.com/hickey2048/p/14753546.html