【网学网提醒】:网学会员,鉴于大家对SQL高级语法汇总十分关注,会员在此为大家搜集整理了“SQL高级语法汇总”一文,供大家参考学习!
SQL高级语法汇总
CUBEROLLUP及COMPUTE关键词
CUBE关键词是用来将所要进行查询的各分组字段内的数据求和的运算。
COMPUTE关键字则是用来将分组做小计,也就是说将字段内进行分组并且将每一组生成一或多个总和平均值等
范例
selectcust_id,SUM(pay1)ASpay11frompay_listGROUPBYpay1WITHCUBE
go
以上代码导致错误因为在SUM汇总函数所指定的字段名称pay1与CUBE关键词一并使用所导致发生的错误消息
修改
SELECTcust_id,SUM(pay1)aspay11FROMpay_listGROUPBYcust_idWITHCUBE
GO
ROLLUP关键词
将GROUPBY后面所加的第一个字段名称来求和而其他的字段并不做
ROLLUP以及CUBE关键词二者之间不同的地方就是ROLLUP只会将GROUPBY后面的第一个字段名称求总和而CUBE则会将每一个字段都求总和的操作
范例
SELECT厂商编号,产品名称,SUM(数量)AS总数量FROMprocedGROUPBY厂商编号,产品名称WITHROLLUP
GO
COMPUTE关键词
用来将分组小计也就是在字段内进行分组,并且将每一组生成一或多个总和平均值等
范例
select厂商编号,产品名称,数量fromprocedcomputesum(数量)
go
以厂商编号作为分类根据时
select厂商编号,产品名称,数量fromprocedorderby厂商编号COMPUTESUM(数量)BY厂商编号
go
7.5HAVING语句
HAVING语句是用来指定组或汇总的搜索条件的。HAVING语句一般只能与SELECT语句一起使用,并且他通常是会在GROUPBY子句中使用
。
范例
计算出其进货的总数量大于200的厂商编号及产品名称
SELECT厂商编号,产品名称,SUM(数量)AS数量FROMprocedGROUPBY厂商编号,产品名称HAVINGSUM(数量)>100
GO
7.6DISTINCT及ALL关键词
范例
SELECTDISTINCTFROMproced
go
7.7ESCAPE关键词
如果想将统配符百分号符号视为字符而非统配符时,可以使用ESCAPE关键词再加上百分号符号即可。
范例
在customs表格中,找出符合折扣为50%的所有记录
usemisdb
go
select*fromcustomswherediscllike'50%'escape'%'
go
7.8批注
方式一:以/*开始以*/结束
方式二:--批注一行
范例:
编写批注的正确用法使用"/*"和"*/"
/*编写批注的用法*/
/*USEPubs
GO*/
select*fromauthors
go
7.9区域变量与全局变量
SQLSERVER中,变量可分为两种一是区域变量另一种是全局变量
在SQLSERVER中,区域变量一般都是由用户自己定义的,其表示方式是以"@"来作为变量名称的开头。而全局变量则是由系统提供的,并且其表示方式是以"@@"来作为变量名称的。
区域变量的生命周期是使用DECLARE语句开始,直到此批处理执行结束时就结束。
DECLARE@TESTint--区域变量@TEST生命周期开始
@TEST=5
SELECT*FROMauthorsWHEREau_id=@TEST
GO--批处理结束执行,@TEST变量的生
命周期结束
SELECT*FROMauthors
GO
区域变量
要使用区域变量,首先要先将区域变量进行声明,在声明区域变量之后系统会将区域变量值初始设置为NULL值,然后再使用SET或SELECT语句来进行设置变量值。将变量进行声明时,你必须要使用DECLARE语句来进行声明。
DECLARE@TESTint--声明变量TEST及其数据类型
SET@TEST=5--设置变量TEST的值为5
声明多个变量名称之间使用逗号来分割。
DECLARE@A1char(10),@a2int,@a3char(10)
使用SELECT语句设置变量时有以下两种方法
一直接设置变量值
DECLARE@TESTint
SELECT@TEST=5
二将查询结果指定给变量,但此种方式必须要求其查询结果是单一值
DECLARE@TESTint
SELECT@TEST=数量FromcustomerWHEREcust_id='A001'
使用SELECT语句来指定变量值时,若你有多个变量要指定多个变量值时,每个变量之间可以用逗号来分割开来。
7.10流程控制
BEGIN...END
用来将一串T-SQL语句使用BEGIN...END的关键词括在一起,以便让被括在一起之内的T-SQL语句可以被执行。
如果所要执行的T-SQL语句只有一行,就不用使用BEGIN...END语句来执行,因为只有一行T-SQL语句就不需要被括在一起来执行。
语法
BEGIN{
sql_statement|statement_block
}
END
BEGIN...END语句组可以是镶套的。
范例
--BEGIN...END语句的使用范例
usepubs
go
begin
select*fromauthorswhereau_idlike'2*'
end
begin
selectcust_id,cust_namefromcustomorderbycust_id
end
IF...ELSE语句
语法
IFBoolean_expression
{sql_statement|statement_block}
else
{sql_statement|statement_block}
如果要执行的T-SQL语句不只一行时,就必须要使用BEGIN...END语句组
范例
--IF...ELSE语句的使用范例
if(selectavg(总成绩)from学生成绩)<60
print'你的总成绩不及格'
else
print'你的总成绩及格,恭喜你!'
--镶套IF...ELSE语句的使用范例
if(selectsum(订单数量)from订单表格)>1000
print'他们是最佳客户'
else
if(selectsum(订单数量)from订单表格)>500
print'必须与他们保持联络'
else
print'再想想办法吧!!'
WHILE循环BREAK及CONTINUE语句
语法声明
whileBoolean_expression
{sql_statement|statement_block}
[BREAK]--退出最内层的WHILE循环
{sql_statement|statement_block}
[CONTINUE]--重新执行WHILE循环忽略掉在CONTINUE之后的任何T-SQL语句
如果有两个或两个以上的WHILE循环组成镶套WHILE循环时,内层的BREAK语句会退出到下一个外层循环。首先在较内层循环结束处之后的T-SQL语句会被执行,然后开始下一个外层的循环。
范例
--使用WHILECONTINUEBREAK语句的使用范例
while(selectavg(单价)from订单表格)<60
begin
set单价=单价*4
if(selectmax(单价)from订单表格)>80
break
else
continue
end
GOTO语句
GOTO语句
可以用来改变执行流程至某个标签名称
语法声明
定义标签名称时
label:
要改变执行时
gotolabel
标签名称摆在GOTO语句之前或之后并没有特别限制。
注意GOTO语句只能在WHILE或IF...ELSE语句内往外跳至标签名称处而不能由外面语句跳进IF...ELSE或WHILE语句内。
范例
--GOTO语句的使用范例
if(selectmax(单价)from订单表格)>100
gotomax_label
else
gotomin_label
max_label:
print'太贵了'
min_label:
print'价格合理'
RETURN语句
将目前正在执行的批处理T-SQL语句,退出程序或语句中断,并返回或不返回数值。
当RETURN语句与存储过程一起使用时,其RETURN并不会返回一个NULL值。但当某程序尝试返回NULL值时,则会生成警告消息,接着会返回一个为0的数值。
语法声明
return[integer_expression]
integer_expression指要返回的整数值
范例
--return的使用范例
createprocedurecheck_maxdata
as
if(selectstatefromauthorswhereau_id='123-34-45')
return1
else
return2
WAITFOR语句
WAITFOR语句是用来指定触发语句组,存储过程或事物执行的时间,时间间隔或事件。执行WAITFOR语句之后,必须等到指定的时间或指定的事件发生后,才能使用到SQLServer的连接。
如果想知道目前谁在使用或等待时,可以使用系统存储过程sp_who来了解。
声明语法
WAITFOR{DELAY'time'|TIME'time'}
参数说明
DELAY用来设置要SQLServer必须要等待所到指定的时数已过时,才可以使用SQLServer的连接
time用来指定要等待的时间
只能指定时间而不能设置日期。其等待时间的设置最多可指定到24小时。
TIME用来指示SQLServer等待到所指定的时间。
范例
--此范例会在下午6:00时会执行select_data存储过程
begin
waitforTIME'18:00'
EXECselect_data
end
begin
waitforTIME'15:20'
print'ninhao'
end
范例
--WAITFORDELAY的使用范例
usepubs
go
--设置要sqlserver等待一分钟再执行下列语句
waitfordelay'00:01:00'
select*fromauthors
go
7.11CASE,RAISERROR语句
CASE
根据条件列表之后来执行表达式,其CASE可分为两种格式:
1一种格式是属于简单的CASE格式,这种CASE会比较表达式与一组简单表达式,以便决定结果。
2另一种格式是属于搜索的CASE格式,这种格式会评估一组布尔表达式,以便决定其结果。
简单CASE声明
CASEinput_expression
WHENwhen_expressionTHENresult_expression
[..n]
[
ELSEelse_result_expression
END
如果想使用搜索CASE格式时,可以根据下面的语法来进行声明
CASE
WHENBoolean_expressionTHENresult_expression
[..n]
[
ELSEelse_result_expression
END
CASE如果没有ELSE且没有任何比较运算其结果为真时CASE语句会返回一个NULL值
范例
--此范例是介绍如果使用简单的CASE格式
use
p
ubs
go
select产品类别=
casetype1
when'水果'thensum1=sum1+1
when'五金'thensum2=sum2+1
when'药品'thensum3=sum3+1
elsesum0=sum0+1
end
go
范例
--此范例会介绍如果使用搜索CASE格式
USEMIS
GO
SELECT语文成绩=
CASE
WHENscorel<59THEN'不及格'
WHENscorel>60andscorel<=70THEN'中上成绩'
WHENscorel>=91andscorel<+100THEN'成绩优良'
END
GO
RAISERROR语句
RAISERROR语句会返回用户所自定义的错误消息,并且设置系统旗标,记录曾发生过的错误。
使用RAISERROR指定用户自定义的错误消息时,请使用大于50,000的错误消息代码和0至18的重要性层级。
使用系统存储过程sp_addmessage来创建自定义的错误消息
RAISERROR语句其语法声明
使用RAISERROR语句来创建并返回用户自定义的错误信息时,请使用sp_addmessage来添加用户自定义的错误消息,并使用sp_dropmessage来删除用户自定义的错误消息。
发生错误时,错误代码会放置在@@ERROR函数中,此函数存放着最近生成的错误代码。
范例
--使用RAISERROR的范例
--使用sp_addmessage来创建自定义错误消息,其中76548是指错误代码,9是代表严重程度,而"错误消息测试"则是代表消息内容
EXECsp_addmessage76548,9,'错误消息测试'
GO
RAISERROR(76548,9,1)
7.12EXEC语句
用来执行存储过程或T-SQL语句的批处理程序等语句。
范例
--执行系统存储过程sp_who的方式
EXECsp_who
go
范例
--执行程序test_pro,并传递一参数
EXECtest_procase_id--其中test_pro为程序名称,而case_id为参数
GO
范例
--使用多个参数以及一个输出参数
--其中a01,b01指的是要给test_pro程序使用的参数
--而@a1则是指要输出的参数名称,我们使用@test来接受@a1所返回的值
EXECtest_pro'a01','b01',@a1=@testOUTPUT
范例
--执行远程程序test1,并传递一个参数
--其中Mis_Server.mis.dbo.order1指的是要执行在远程服务器mis_server,在mis@t1指的是接受自执行后的order1程序状态值
EXEC@t1=Mis_Server.mis.dbo.order1'981-098'
GO
范例
--以字符串方式
EXEC('THIS'+'A098.18364.47')
GO
本文来自CSDN博客,转载请标明出处:blog.csdn.net/chuxue1342/archive/2007/10/06/1812805.aspx