SQL流程控制语句.pptx
变量变量SQLServer的变量分为两种:用户自己定义的局部变量开头的标识符表示局部变量系统定义和维护的全局变量开头的标识符表示全局变量第1页/共23页 局部变量局部变量局部变量的作用范围:定义局部变量的批处理、存储过程、触发器或语句块。1.局部变量的定义DECLARE局部变量名数据类型,n注意:变量不能是text、ntext或image数据类型。第2页/共23页例:定义变量sname为nvarchar(10)类型,定义变量snum为int类型例:定义变量snum为int类型:DECLARE snum intDECLARE sname nvarchar(10),snum int不能有空格第3页/共23页(1)用SET语句给局部变量赋值SET局部变量名=变量值(2)在查询语句SELECT中给局部变量赋值SELECT局部变量名=变量值,n2 2.局部变量的赋值局部变量的赋值局部变量在赋值之前,默认为局部变量在赋值之前,默认为NULL。如果在程序中引用它,必须要先为其赋值。如果在程序中引用它,必须要先为其赋值。P136第4页/共23页3.局部变量的输出PRINT局部变量注:变量的输出仅用于DBA调试时使用。第5页/共23页T-SQL也提供了用于编写过程性代码的语法结构,可用于进行顺序、分支、循环等程序设计。控制流语句控制流语句说明说明BEGINEND程序块语句程序块语句IFELSE条件处理语句条件处理语句CASE分支语句分支语句WHILE循环语句循环语句GOTO无条件跳转语句无条件跳转语句RETURN无条件退出语句无条件退出语句WAITFOR延迟语句延迟语句BREAK跳出循环语句跳出循环语句CONTINUE跳出本次循环语句跳出本次循环语句第6页/共23页BEGINEND语句块的界定,相当于C语言中的“”BEGINsql_statement|statement_blockEND注意:BEGIN 和 END 语句必须成对使用P145第7页/共23页IFELSEIFBoolean_expressionsql_statement|statement_blockELSEsql_statement|statement_blockDECLARExint,yintSETx=1SETy=4IFxyPRINTxyELSEPRINTx80PRINT成绩不错ELSEPRINT需要继续努力3-105的平均成绩80如果布尔表达式中含有 SELECT 语句,必须用圆括号将 SELECT 语句括起来第9页/共23页练习:判断“陆君”是否在95033班,如果在输出”陆君在95033班”否则输出“陆君不在95033班”USESchoolIFEXISTS(SELECT*FROMStudentWHERESname=陆君ANDClass=95033)PRINT陆君在95033班ELSEPRINT陆君不在95033班陆君在95033班第10页/共23页练习:判断“陆君”是否在95033班,如果在输出”陆君在95033班”否则输出“陆君不在95033班”USESchoolGOIF陆君in(SELECTSnameFROMStudentWHEREClass=95033)PRINT陆君在95033班ELSEPRINT陆君不在95033班第11页/共23页练习:判断“陆君”是否在95033班,如果在输出”陆君在95033班”否则输出“陆君不在95033班”USESchoolIF95033=(SELECTClassFROMStudentWHERESname=陆君)PRINT陆君在95033班ELSEPRINT陆君不在95033班第12页/共23页多条件分支选择CASE(1)简单表达式CASEinput_expressionWHENTHEN.nELSEEND2)选择表达式CASEWHENTHEN.nELSEENDCASE具有以下两种格式:(1)简单表达式,将某个表达式与一组简单表达式进行比较以确定结果。(2)选择表达式,计算一组布尔表达式以确定结果。第13页/共23页例:用CASE语句,根据教师的职称来分级USESchoolSELECTTname,depart,CASEProfWHEN教授THEN高级职称WHEN副教授THEN高级职称WHEN讲师THEN中级职称WHEN助教THEN初级职称ELSE无职称ENDFROMTeacher只做临时显示,并不对表进行修改第14页/共23页例:利用CASE语句对学生的成绩进行评价USESchoolSELECTSno,Cno,CASEWHENDegree=90THENAWHENDegree=80THENBWHENDegree=70THENCWHENDegree=60THENDELSEEENDASRankFROMScoreORDERBYSno第15页/共23页循环语句循环语句 WHILEWHILEBoolean_expressionsql_statement|statement_blockBREAK-跳出本层循环sql_statement|statement_blockCONTINUE-跳出本次循环 sql_statement|statement_block-布尔表达式,进行条件判断第16页/共23页练习:计算从1加到100并输出结果。DECLAREsum100int,iintSETsum100=0SETi=0WHILEi=100BEGINSETsum100=sum100+iSETi=i+1ENDPRINTsum100第17页/共23页下列语句实现的什么功能下列语句实现的什么功能WHILE(SELECTAVG(Degree)FROMScoreWHERECno=3-105)=100BREAKENDSELECT*FROMScoreWHERECno=3-105-计算3-105课的平均成绩-将3-105课的成绩提高5分/*如果3-105课的最高成绩大于100分则跳出循环*/第18页/共23页跳转语句跳转语句 GOTOGOTO语句将程序无条件地转到相应的标签的语句。DECLAREsum100int,iintSELECTsum100=0,i=0My_Loop:SETsum100=sum100+iSETi=i+1IFi=100GOTOMy_LoopPRINTsum100标签要符合命名规则,并且有“:”不利于程序阅读,不符合结构化程序的三种思想,因此不提倡用GOTO语句第19页/共23页延时语句延时语句 WAITFORWAITFOR语句可以将它之后的语句在一个指定的时间间隔之后执行,或在未来的某一指定时间执行。WAITFORDELAY延时时间|TIME到达时间 WAITFORDELAY0:00:05PRINT时间到!WAITFORTIME20:00:00PRINT下课喽!-五秒钟后显示“时间到!”必须是datetime数据类型,但不能包含日期部分必须是datetime数据类型,但不能包含日期部分不超过24小时第20页/共23页函数函数P1511.1.字符串函数字符串函数2.2.日期和时间函数日期和时间函数3.3.数学函数数学函数4.4.系统函数系统函数第21页/共23页批处理批处理批处理是包含一个或多个T-SQL语句的组,从应用程序一次性地发送到SQLServer执行。GO是一个批处理的结束语句。1.GO不是T-SQL语句,但是可以被查询分析器识别。2.GO命令和Transact-SQL语句不可在同一行上。但在GO命令行中可包含注释。P143第22页/共23页谢谢您的观看!第23页/共23页