《SQL流程控制语句PPT》由会员分享,可在线阅读,更多相关《SQL流程控制语句PPT(23页珍藏版)》请在金锄头文库上搜索。
1、流程控制语句 1 变量 SQLServer的变量分为两种 用户自己定义的局部变量 开头的标识符表示局部变量系统定义和维护的全局变量 开头的标识符表示全局变量 2 局部变量 局部变量的作用范围 定义局部变量的批处理 存储过程 触发器或语句块 1 局部变量的定义DECLARE 局部变量名数据类型 n 注意 变量不能是text ntext或image数据类型 3 例 定义变量 sname为nvarchar 10 类型 定义变量 snum为int类型 例 定义变量 snum为int类型 DECLARE snumint DECLARE snamenvarchar 10 snumint 不能有空格 4 1
2、 用SET语句给局部变量赋值SET 局部变量名 变量值 2 在查询语句SELECT中给局部变量赋值SELECT 局部变量名 变量值 n 2 局部变量的赋值 局部变量在赋值之前 默认为NULL 如果在程序中引用它 必须要先为其赋值 P136 5 3 局部变量的输出 PRINT 局部变量注 变量的输出仅用于DBA调试时使用 6 T SQL也提供了用于编写过程性代码的语法结构 可用于进行顺序 分支 循环等程序设计 7 BEGIN END 语句块的界定 相当于C语言中的 BEGIN sql statement statement block END P145 8 IF ELSE IFBoolean e
3、xpression sql statement statement block ELSE sql statement statement block DECLARE xint yintSET x 1SET y 4IF x yPRINT x y ELSEPRINT x y 布尔表达式 进行条件判断 定义变量 给变量赋值 9 练习 学生的成绩表中 如果3 105课程平均成绩在80分以上则显示 考试成绩不错 否则显示 需要继续努力 USESchoolIF SELECTAVG Degree FROMScoreWHERECno 3 105 80PRINT 成绩不错 ELSEPRINT 需要继续努力 3
4、105的平均成绩 80 如果布尔表达式中含有SELECT语句 必须用圆括号将SELECT语句括起来 10 练习 判断 陆君 是否在95033班 如果在输出 陆君在95033班 否则输出 陆君不在95033班 USESchoolIFEXISTS SELECT FROMStudentWHERESname 陆君 ANDClass 95033 PRINT 陆君在95033班 ELSEPRINT 陆君不在95033班 陆君在95033班 11 练习 判断 陆君 是否在95033班 如果在输出 陆君在95033班 否则输出 陆君不在95033班 USESchoolGOIF 陆君 in SELECTSnam
5、eFROMStudentWHEREClass 95033 PRINT 陆君在95033班 ELSEPRINT 陆君不在95033班 12 练习 判断 陆君 是否在95033班 如果在输出 陆君在95033班 否则输出 陆君不在95033班 USESchoolIF 95033 SELECTClassFROMStudentWHERESname 陆君 PRINT 陆君在95033班 ELSEPRINT 陆君不在95033班 13 多条件分支选择CASE 1 简单表达式CASEinput expressionWHEN THEN n ELSE END 2 选择表达式CASEWHEN THEN n ELS
6、E END CASE具有以下两种格式 1 简单表达式 将某个表达式与一组简单表达式进行比较以确定结果 2 选择表达式 计算一组布尔表达式以确定结果 14 例 用CASE语句 根据教师的职称来分级 USESchoolSELECTTname depart CASEProfWHEN 教授 THEN 高级职称 WHEN 副教授 THEN 高级职称 WHEN 讲师 THEN 中级职称 WHEN 助教 THEN 初级职称 ELSE 无职称 ENDFROMTeacher 只做临时显示 并不对表进行修改 15 例 利用CASE语句对学生的成绩进行评价 USESchoolSELECTSno Cno CASEWH
7、ENDegree 90THEN A WHENDegree 80THEN B WHENDegree 70THEN C WHENDegree 60THEN D ELSE E ENDASRankFROMScoreORDERBYSno 16 循环语句WHILE WHILEBoolean expression sql statement statement block BREAK 跳出本层循环 sql statement statement block CONTINUE 跳出本次循环 sql statement statement block 布尔表达式 进行条件判断 17 练习 计算从1加到100并输
8、出结果 DECLARE sum100int iintSET sum100 0SET i 0WHILE i 100BEGINSET sum100 sum100 iSET i i 1ENDPRINT sum100 18 下列语句实现的什么功能WHILE SELECTAVG Degree FROMScoreWHERECno 3 105 100BREAKENDSELECT FROMScoreWHERECno 3 105 计算3 105课的平均成绩 将3 105课的成绩提高5分 如果3 105课的最高成绩大于100分则跳出循环 19 跳转语句GOTO GOTO语句将程序无条件地转到相应的标签的语句 DE
9、CLARE sum100int iintSELECT sum100 0 i 0My Loop SET sum100 sum100 iSET i i 1IF i 100GOTOMy LoopPRINT sum100 标签要符合命名规则 并且有 不利于程序阅读 不符合结构化程序的三种思想 因此不提倡用GOTO语句 20 延时语句WAITFOR WAITFOR语句可以将它之后的语句在一个指定的时间间隔之后执行 或在未来的某一指定时间执行 WAITFOR DELAY 延时时间 TIME 到达时间 WAITFORDELAY 0 00 05 PRINT 时间到 WAITFORTIME 20 00 00 PRINT 下课喽 五秒钟后显示 时间到 必须是datetime数据类型 但不能包含日期部分 必须是datetime数据类型 但不能包含日期部分 不超过24小时 21 函数 P1511 字符串函数2 日期和时间函数3 数学函数4 系统函数 22 批处理 批处理是包含一个或多个T SQL语句的组 从应用程序一次性地发送到SQLServer执行 GO是一个批处理的结束语句 GO不是T SQL语句 但是可以被查询分析器识别 GO命令和Transact SQL语句不可在同一行上 但在GO命令行中可包含注释 P143 23