1、SQL Server与数据库应用开发与数据库应用开发第第1010章章 T-SQL T-SQL 编程编程S Q L S e r v e r 与数据库应用开发第1 0 章 T-S Q L 编10.1.SQL Server编程基础10.2.SQL Server的系统函数10.3.用户自定义函数10.4.游标10.5 编程综合应用主要内容主要内容主要内容【知识要求】:1.了解T-SQL编程的基本语法和流程控制 2.了解系统函数使用 3.理解用户自定义函数;4.了解游标的作用。【能力要求】:1.会进行数据库编程;2.会编写自定义函数;3.掌握游标编程技术。知识与能力要求知识与能力要求【知识要求】:1.了
2、解T-S Q L 编程的基本语法和流程控制知识 SQL Server中的编程语言就是T-SQL语言,T-SQL命令除了可以单独使用以外,还可以使用流程控制语句吧多个命令组合成一段程序,用以完成各种更为复杂的程序算法。本节主要内容学习T-SQL语法约定,常量,变量,表达式,流程控制等内容。10.1 SQL Server 10.1 SQL Server 编程基础编程基础1 0.1 S Q L S e r v e r 编程基础1.T-SQL1.T-SQL语法约定语法约定 1.标识符 定义,命名规则 2.续行 3.注释 单行-,快注释/*/4.批处理 go1.T-S Q L 语法约定 1.标识符2.2
3、.常量常量 在程序运行过程中,其值不变的符号称为常量。根据常量值的不同类型,常量分为:字符串常量 二进制常量 整型常量 实数常量 日期时间常量 货币常量 2.常量 在程序运行过程中,其值不变的符号称为常量。3 3.变量变量(1)、局部变量 用户自己定义的变量称为局部变量。局部变量用于保存特定类型的单个数据值的对象。定义格式:DECLARE 局部变量名 数据类型 ,.n 局部变量的赋值 SET 局部变量名=表达式,n SELECT 局部变量名=表达式,n FROM 子句 WHERE 子句【案例10.1】声明一个局部变量dept_name,把 TestDB数据库中的“系部”表中系部代码为01的系部
4、名称赋给局部变量dept_name,并输出。3.变量(1)、局部变量 3.3.变量变量(2).全局变量 全局变量由系统定义和维护的变量,用于记录服务器活动状态的一组数据。全局变量名由符号开始。用户不能建立全局变量,也不可能使用SET语句去修改全局 变量的值。例如:version:返回当前SQL Server服务器的版本和处理器类型。language:返回当前SQL Server服务器的语言。3.变量(2).全局变量4.4.流程控制语句流程控制语句 流程控制语句主要用于控制程序的顺序。(1)、BEGIN END 语句 BEGIN END 语句用于将多个 Transact-SQL 语句组合为一个逻
5、辑块,相当于一个单一语句,达到一起执行的目的。它的语法格式如下。BEGIN 语句1 语句2 END 4.流程控制语句 流程控制语句主要用于控制程序的顺序。4 4、流程控制语句、流程控制语句 (2)、IFELSE语句 IFELSE语句实现程序选择结构。它的语法格式如下。IF 逻辑表达式 语句块1 ELSE 语句块 2 【案例10.2】在TestDB数据库中,查询学生的平均成绩是否超过75,并显示相关信息。4、流程控制语句(2)、I F E L S E 语句4 4、流程控制语句、流程控制语句 -在TestDB数据库中,查询学生的平均成绩是否超过75,并显示相关信息。use TestDB go de
6、clare avg_score floatselect avg_score=AVG(score)from tb_score if avg_score 75 print 学生的平均成绩超过了 else print 学生的平均成绩不超过了 go4、流程控制语句-在T e s t D B 数据库中,查询学生的平均4 4、流程控制语句、流程控制语句 (3)WHILE语句 WHILE 语句实现循环结构。如果指定的条件为真,就重复执行语句块,直到逻辑表达式为假。语法格式如下。WHILE 逻辑表达式 BEGIN 语句块1 CONTINUE BREAK 语句块2 END 4、流程控制语句(3)WH I L E
7、 语句WH I L E 逻辑表4 4.流程控制语句流程控制语句 (4)RETURN语句 RETURN语句实现从查询或过程中无条件退出的功能。语法格式如下。RETURN 整数表达式(5)PRINT PRINT语句用于向客户端返回用户信息。语法格式:PRINT 字符串|变量|字符串的表达式4.流程控制语句(4)R E T U R N 语句4 4.流程控制语句流程控制语句 (6)WAITFOR语句 WAITFOR语句实现语句延缓一段时间或延迟到某特定的时间执行。语法格式如下。WAITFOR DELAY time|TIME time 说明:DELAY:指示一直等到指定的时间过去,最长可达24小时。ti
8、me:要等待的时间。TIME:指示SQL Server等待到指定的时间 【案例10.3】根据“学生”表输出“系部代码”为“02”的“学号”、“姓名”、“出生日期”,在输出之前等待4秒。V10-1-3 WAITFOR语句应用视频.wmv4.流程控制语句(6)WA I T F O R 语句 D E L A Y:指示在SQL Server查询、报表和许多T-SQL语句中常使用函数来返回信息,SQL中的函数在其他编程语言中使用的函数相似。函数返回类型可以是用于表达式的值或表格。SQL Server 中的函数可分系统函数和用户自定义函数。10.2 SQL Server 10.2 SQL Server 的
9、系统函数的系统函数在S Q L S e r v e r 查询、报表和许多T-S Q L 语句中常使用1 1.聚合函数聚合函数聚合函数用于对一组值执行计算,并返回单个值。聚合函数可以在SELECT语句的选择列表(子查询或外部查询)、GROUP BY子句、COMPUTE BY 子句、HAVING子句中作为表达式使用。常用的聚合函数:AVG()、COUNT()、MAX()、MIN()、SUM()等等。1.聚合函数聚合函数用于对一组值执行计算,并返回单个值。【案例10.4】统计课程平均成绩。use TestDB select cos_name as 课程名,avg(tb_score.score)as
10、平均成绩 from tb_course,tb_scorewhere tb_course.cos_num=tb_score.cos_numgroup by tb_course.cos_name 图10.1 聚合函数的使用示例聚合函数应用聚合函数应用【案例1 0.4】统计课程平均成绩。图1 0.1 聚合函数的使2 2、数学函数、数学函数数学函数用于对数字表达式进行数学计算并返回运算结果。常用的数学函数:(1)ABS(数值表达式):返回表达式的绝对值;(2)CEILING(数值表达式):返回大于或等于数值表达式的最小整数;(3)FLOOR(数值表达式):返回小于或等于表达式值得最小整数;(4)PI(
11、):返回PI的常量值,3.14159265358979。(5)RAND():返回01之间的随机float值。(6)POWER(数字表达式,幂):返回数字表达式的指定次幂的值。(7)ROUND(x,y):返回以y指定的精度进行四舍五入后的数值。2、数学函数数学函数用于对数字表达式进行数学计算并返回运算结【案例10.5】数学函数的应用1、求给定数-24.5的绝对值:select abs(-24.5)2、产生一个1-100随机数:select ceiling(RAND()*100)3、计算43的值:select power(4,3)数学函数应用数学函数应用图10.2 数学函数的使用示例【案例1 0.
12、5】数学函数的应用数学函数应用图1 0.2 数学 3.3.字符串函数字符串函数字符串函数用于对字符串输入值执行操作,返回字符串或数字值。常用字符串函数(1)ASCII(str):返回字符表达式最左端字符的 ASCII 代码值。(2)CHAR(x):将 ASCII 代码转换为字符的字符串函数,返回值在0-255之间。(3)LEFT(str,x):返回字符串中从左边开始指定个数的字符。(4)LEN(str):返回字符串的字符个数,不包含尾随空格。(5)LOWER(str):将大写字符数据转换为小写字符数据,返回类型为varchar。(6)LTRIM(str):删除起始空格,返回类型为varchar
13、。(7)REPLACE(str1,str2,str3):用第三个表达式替换第一个字符串表达式中出现的所有第二个给定字符串表达式。3.字符串函数字符串函数用于对字符串输入值执行操作,返回字 3 3、字符串函数字符串函数常用字符串函数(8)REPLICATE(str,x):以指定的次数重复字符表达式。(9)REVERSE(str):将指定字符串逆序排列。(10)RIGHT(str,x):返回字符串中从右边开始指定个数的字符。(11)RTRIM(str):删除尾随空格,返回类型为varchar。(12)SPACE(x)为产生指定个数的空。(13)SUBSTRING(str,start,len):截取
14、指定的部分字符串。(14)UPPER(str):将小写字符数据转换为大写字符数据,返回类型为varchar。3、字符串函数常用字符串函数【案例10.6】字符串函数的应用1、将“石化学院”中的“学院”用“职业技术学院”select replace(石化学院,学院,职业技术学院)2、将“石化职业技术学院”逆序输出select reverse(石化职业技术学院)3、去掉“石化职业技术学院”前面的空格 select Ltrim(石化职业技术学院)4、提取“石化职业技术学院”右边4个字符select right(石化职业技术学院,4)字符串函数应用字符串函数应用图10.3 字符串函数的使用示例【案例1
15、0.6】字符串函数的应用字符串函数应用图1 0.3 日期和时间函数用于对日期和时间输入值执行操作,并返回一个字符串、数字值或日期和时间值。常用日期和时间 函数(1)GETDATE():返回当前系统日期和时间。(2)DATENAME(datepart,date):返回某日期指定部分的字符串。(3)DAY(date):返回代表指定日期的天的日期部分的整数。(4)MONTH(date):返回代表指定日期月份的整数。(5)YEAR(date):返回表示指定日期中的年份的整数。4.4.日期和时间函数日期和时间函数日期和时间函数用于对日期和时间输入值执行操作,并返回一个字符【案例10.7】日期和时间函数的
16、应用1、返回当前系统日期和时间。2、返回当前系统日期的天3、返回代表指定日期的天的日期部分的整数。4、返回代表指定日期月份的整数。5、返回表示指定日期中的年份的整数。4.4.日期和时间函数日期和时间函数图10.4 日期时间函数的应用【案例1 0.7】日期和时间函数的应用 4.日期和时间函数图 用户自定义函数是由一个或多个T-SQL语句组成的子程序,一般是为了方便重用。用户定义函数可以有输入参数并有返回值,但没有输出参数。当函数的输入参数有默认值是,调用该函数是必须明确指定DEFAULT关键字,才能获取默认值。使用CREATE FUNCTION语句可创建用户定义函数,使用ALTERFUNCTIO
17、N语句可修改用户定义函数,使用DROP FUNCTION语句可删除用户定义函数。10.3 10.3 用户自定义函数用户自定义函数 用户自定义函数是由一个或多个T-S Q L 语句组成的子程CREATE FUNCTION 函数名(变量列表)RETURNS 函数返回值类型 AS BEGIN 函数体 RETURN 返回值 END1 1、用户自定义函数的格式用户自定义函数的格式V10-3-1 用户自定义函数的应用视频.wmv1、用户自定义函数的格式V 1 0-3-1 用户自定义函数的应【案例10.8】自定义函数if_pass,统计学生考试是否合格的信息。create function if_pass(
18、x int)returns varchar(8)as begin declare pass1 varchar(8)if x=60 set pass1=合格 ELSE set pass1=不合格 return pass1 end go2 2、用户自定义函数、用户自定义函数图10.5 用户自定义函数【案例1 0.8】自定义函数i f _ p a s s,统计学生考试是否合10.4 10.4 游标游标1、游标的基本概念使用SELECT语句返回的结果集包括所有满足条件的数据行,但在实际开发应用程序时,往往每次需要处理一行或一部分行,此时可以使用游标。游标支持一下功能:在SELECT结果集中定位特定的数
19、据行 查询SELECT结果集当前位置的数据行 修改SELECT结果集当前位置数据行的数据 2、SQL Server支持两种类型的游标:TSQL服务器游标 数据库应用程序编程接口(API)游标函数 1 0.4 游标1、游标的基本概念2 、S Q L S e r v e r10.410.4.1 1 游标的使用过程游标的使用过程1、TSQL服务器游标的声明 使用DECLARE CURSOR语句,语法格式如下:DECLARE 游标名称 CURSOR FOR select语句2、使用OPEN打开游标 语法格式如:OPEN 游标名称 3、使用FICTH语句从SELECT结果集中查询单独的数据行,语法格式如
20、下:FECTH NEXT FROM 游标名称INTO 变量名,1 0.4.1 游标的使用过程1、T S Q L 服务器游标的声明310.4.110.4.1游标的使用过程游标的使用过程4、使用UPDATE或DELETE修改游标位置的数据行。5、使用CLOSE语句关闭游标,结束动态游标的操作并释放资源。语法格式如下:CLOSE 游标名称6、使用DEALLOCATE语句从当前的会话中删除对游标的引用,以释放分配给游标的所有资源。游标释放之后不可以重新打开。DEALLOCATE 游标名称 1 0.4.1 游标的使用过程4、使用U P D A T E 或D E L E T E10.4.110.4.1游标
21、的应用游标的应用【案例10.9】声明一个curCourse的游标,该游标从tb_course表中查询所有数据行use TestDBgodeclare curCourse cursor for select*from tb_courseopen curCourse fetch next from curCourse go close curCourse deallocate curcourse go图10.6 游标的应用1 0.4.1 游标的应用【案例1 0.9】声明一个c u r C o u1.利用TestDB数据库,使用SQL Server编程知识,生成试卷。2.编程阅卷,计算2016-6-20,学号为201201010101学生,课程编号为001的课程总成绩。10.5 10.5 综合应用综合应用1 0.5 综合应用见习题与答案习题习题见习题与答案习题