《第4章 T-SQL编程》由会员分享,可在线阅读,更多相关《第4章 T-SQL编程(33页珍藏版)》请在金锄头文库上搜索。
1、第4章T SQL编程 T SQL编程 Transact SQL编程概述 Transact SQL是结构化查询语言 SQL 的增强版本 且只能在SQLSERVER上使用 它是用来让应用程式与SQLServer沟通的主要语言 T SQL提供标准SQL的DDL和DML功能 加上延伸的函数 系统预存程序以及程式设计结构 例如IF和WHILE 让程式设计更有弹性 T SQL的功能随著新版的SQLServer而持续成长 目标 变量注释符与运算符常用命令流程控制T SQL编程示例 变量 数据在内存中存储可以变化的量叫变量 Transact SQL可以使用两种变量 局部变量全局变量 局部变量 局部变量是用户可
2、自定义的变量 它的作用范围仅在程序内部 声明局部变量DECLARE 局部变量名数据类型 n declare xint为局部变量赋值set x 500select x max score fromscore 全局变量 全局变量是SQLServer系统内部事先定义好的变量 不用用户参与定义 对用户而言 其作用范围并不局限于某一程序 而是任何程序均可随时调用 全局变量通常用于存储一些SQLServer的配置设定值和效能统计数据 全局变量的名称都是以 开头的 常用的全局全量 language当前使用的语言的名称 IDENTITY返回最后插入的标识值 ROWCOUNT返回受上一语句影响的行数 VERSI
3、ON返回SQLServer当前安装的日期 版本和处理器类型 注释符与运算符 注释符单行注释 多行注释 运算符算术运算符 赋值运算符 比较运算符 逻辑运算符 ALLANDANYBETWEENEXISTSINLIKENOTOR 常用命令 PRINT将用户定义的消息返回客户端USE将数据库上下文更改为指定数据库GO用信号通知SQLServer一批T SQL语句的结束 PRINT命令 PRINT 命令用于在指定设备上显示信息 可以输出的数据类型只有 char nchar varchar nvarchar以及全局变量 VERSION等 PRINT命令的语句如下 PRINT anyASCIItext lo
4、cal variable FUNCTION string expr说明 anyASCIItext 文本或字符串 local variable 字符类型的局部变量 FUNCTION 返回字符串结果的函数 string expr 字符串表达式 最长为8000个字符 批 一个批是由一条或多条T SQL语句组成的语句集 这些语句一起提交并作为一个组来执行 SQLServer将批中的语句作为一个整体编译为一个执行计划 因为批中的语句是一起提交给服务器的 所以可以节省系统开销 在查询分析器中 可以用GO命令标志一个批的结束 GO不是一个执行语句 是通知查询分析器有多少语句要包含在当前的批中 查询分析器将两
5、个GO之间的语句组成一个字符串交给服务器去执行 注意 如果在一个批处理中 某条语句存在语法错误 SQLServer将不执行批处理中的任何语句 流程控制 流程控制语句是用来控制程序执行流程的语句 使用流程控制语句可以提高编程语言的处理能力 与程序设计语言 如C语言 一样 Transact SQL语言提供的流程控制语句如下表所示 BEGIN END 包括一系列的Transact SQL语句 使得可以执行一组Transact SQL语句 语法 BEGINsql statementEND参数 sql statement是任何有效的Transact SQL语句或以语句块定义的语句分组 BEGIN END
6、嵌套使用 BEGIN END语句可以嵌套使用 例如 BEGINDECLARE MyVarfloatSET MyVar 456 256 BEGINPRINT 变量 MyVar的值为 PRINTCAST MyVarASvarchar 12 END END IF ELSE 在执行Transact SQL语句时强加条件 如果条件满足 布尔表达式返回TRUE时 则在IF关键字及其条件之后执行Transact SQL语句 可选的ELSE关键字引入备用的Transact SQL语句 当不满足IF条件时 布尔表达式返回FALSE 就执行这个语句 语法 IFBoolean expressionsql state
7、ment ELSEsql statement 参数 Boolean expression 是返回TRUE或FALSE的表达式 sql statement 是任何有效的Transact SQL语句或以语句块定义的语句分组 例如 IFexists SELECT FROM成绩表WHERE学期 10 SELECT FROM成绩表WHERE成绩编号 10ELSEPRINT 没有这条记录 CASE 计算条件列表并返回多个可能结果表达式之一 语法 CASEinput expressionWHENwhen expressionTHENresult expression n ELSEelse result ex
8、pression END 例如 SELECT成绩编号 学号 课程代号 成绩状况 CASEWHEN课程成绩 90THEN 优秀 WHEN课程成绩 80THEN 良 WHEN课程成绩 70THEN 一般 WHEN课程成绩 60THEN 及格 ELSE 不及格 ENDFROM成绩表 成绩状况 不是表中的字段 WHILE CONTINUE BREAK 设置重复执行SQL语句或语句块的条件 只要指定的条件为真 就重复执行语句 可以使用BREAK和CONTINUE关键字在循环内部控制WHILE循环中语句的执行 语法 WHILEBoolean expressionsql statement BREAK CO
9、NTINUE 例如 DECLARE xintSET x 0WHILE x 3BEGINSET x x 1PRINT x CONVERT char 1 x END RETURN 从查询或过程中无条件退出 RETURN即时且完全 可在任何时候用于从过程 批处理或语句块中退出 不执行位于RETURN之后的语句 语法 RETURN integer expression 参数 integer expression是返回的整型值 WAITFOR 指定触发语句块 存储过程或事务执行的时间 时间间隔或事件 语法 WAITFOR DELAY time TIME time 参数DELAY指示SQLServer一直
10、等到指定的时间过去 最长可达24小时 TIME指示SQLServer等待到指定时间 例如 延迟30秒钟执行查询命令 WAITFORDELAY 00 00 30 SELECT FROM成绩表在时刻21 20 00时执行查询命令 WAITFORTIME 21 20 00 SELECT FROM成绩表 总结 变量注释符与运算符常用命令流程控制T SQL编程示例 上机作业 T SQL编程示例 将课件上的所有SQL代码练习一遍1 输出所有学生的最高分和最低分2 学生表中的 路人甲 是否是润年出生的3 计算1至100之间的和4 显示 王五 的 Java 成绩是否及格5 30秒后显示学生表的信息 家庭作业
11、涉及到的表如下 创建学生信息表 包含有 学号 姓名 性别 年龄和民族等字段 创建学生成绩表 包含有学号和成绩两个字段完成以下练习 1 打印出学号为 S02 的学生的年龄 要求以变量的形式输出 2 查询所有年龄大于 S03 的学生信息3 打印出stuInfo表中学生的平均年龄 如果平均年龄大于22 则输出OK 否则输出NO4 循环增加学生信息表中每个人的年龄 直到每个人的年龄都大于等于25为止 下面是上机作业的参考代码 1 输出所有学生的最高分和最低分 declare maxreal minrealselect max max score fromscoreselect min min scor
12、e fromscoreprint 最高分是 ltrim str max print 最低分是 ltrim str min 2 学生表中的 路人甲 是否是润年出生 declare yearintselect year year birthday fromstudentwherename 路人甲 if year 4 0and year 100 0or year 400 0 print 路人甲是润年出生的 elseprint 路人甲不是润年出生的 3 计算1至100之间的和 declare iint sumintset i 1set sum 0while i 100 beginset sum sum
13、 iset i i 1endprint sum 4 显示 王五 的 Java 成绩是否及格 declare s idvarchar 20 declare c idvarchar 20 declare scorerealselect s id student idfromstudentwherename 王五 select c id course idfromcoursewherecourse name Java select score scorefromscorewherestudent id s idandcourse id c idif score 60 print 王五的成绩是 ltrim str score 及格了 elseprint 王五的成绩是 ltrim str score 不及格 5 30秒后显示学生表的信息 waitfordelay 00 00 30 select fromstudent