第十章TSQL程序设计.ppt
《第十章TSQL程序设计.ppt》由会员分享,可在线阅读,更多相关《第十章TSQL程序设计.ppt(67页珍藏版)》请在三一办公上搜索。
1、第十章 T-SQL程序设计,1,本章主题,将两个或更多的表联接起来以看到更多的结果信息获取一种通过变量以临时保存信息的方法如何将行信息保存到非永久的表中如何聚合值组织输出数据到相关的信息分组中返回唯一和独特的值错误处理:如何创建你自己的错误,捕捉错误,并让代码更安全,T-SQL程序设计,3,T-SQL的目的在于为处理大量数据提供必要的结构化处理能力。前面的章节中已经介绍了一些处理简单查询的T-SQL语句,但是当面对更为复杂的应用时,前面所学的知识就远远不够了。因此,在本章中将主要讨论如何使用T-SQL提供的丰富编程结构,编写出复杂的例行程序。,第一节 T-SQL简介,4,T-SQL是Micro
2、soft SQL Server提供的查询语言,它是Microsoft公司对于ANSI SQL的一个扩展,它不仅提供了对SQL标准的支持,另外还提供了类似于C等编程语言的基本功能。T-SQL的目的在于为事务型数据库开发提供一套过程化的开发工具。T-SQL对于使用SQL Server非常重要,它是SQL Server功能的核心,使用T-SQL编写程序可以完成所有的数据库管理工作,与SQL Server通信的所有程序都通过向数据库服务器发送T-SQL语句来进行通信,而与应用程序的用户界面是什么形式无关。,第二节 T-SQL编程基础,5,(一)注释,6,T-SQL中的注释语句,也称为注解,注释内容通常
3、是一些说明性文字,对程序的结构及功能给出简要的解释。注释语句不是可执行语句,不被系统编译,也不被程序执行。使用注释语句的目的是为了使程序代码易读易分析,也便于日后的管理和维护。SQL Server支持两种形式的程序注释语句:1单行注释语句:使用ANSI标准的注释符“-”,注释语句写在“-”的后面,只能书写单行。2多行注释语句:使用与C语言相同的程序注释符“/*/”,注释语句写在“/*”和“*/”之间,可以连续书写多行。例10-1:合法的注释语句。-打开Student数据库USE Student GO/*查询Classes表中所有记录的Class_id,Class_name以及 Class_de
4、partment三个字段的内容*/,7,注释,SELECT Class_id,Class_name,Class_department FROM Classes GO 当然,连续多行注释也可以使用注释符“-”,只要每行注释开头都加上注释符“-”。单行注释语句也可以使用注释符“/*/”,只要将注释语句写在“/*”和“*/”之间。例如上面的例子中注释语句也可以写成:/*打开Student数据库*/USE StudentGO-本条SQL语句用来查询Classes表中所有记录的Class_id,Class_name,-Class_department三个字段的内容SELECT Class_id,Clas
5、s_name,Class_departmentFROM ClassesGO,(二)批处理,8,所谓批是指从客户机传送到服务器上的一组完整数据和SQL指令,批中的所有SQL语句做为一个整体编译成一个执行单元后从应用程序一次性地发送到SQL Server服务器进行执行,称之为批处理。所有的批处理命令都使用GO作为结束标志,当T-SQL的编译器扫描到某行的前两个字符是GO的时候,它会把GO前面的所有语句作为一个批处理送往服务器。由于批处理中的所有语句被当作是一个整体,因此若其中一个语句出现了编译错误,则该批处理内所有语句的执行都将被取消。例10-2:正确的批处理。-第一个批处理打开Student数据
6、库USE Student GO-第二个批处理在Teachers表中查询姓王的教师的记录SELECT*FROM Teachers WHERE SUBSTRING(Teacher_name,1,1)=王GO,(三)局部变量,9,变量是执行程序中必不可少的部分,它主要是用来在程序运行过程中存储和传递数据。变量其实就是内存中的一个存储区域,存储在这个区域中的数据就是变量的值。在T-SQL语句中变量有两种,局部变量与全局变量。这两种变量在使用方法和具体意义上均不相同,本部分主要介绍局部变量。局部变量是作用域局限在一定范围内的变量,是用户自定义的变量。一般来说,局部变量的使用范围局限于定义它的批处理内。定
7、义它的批处理中的SQL语句可以引用这个局部变量,直到批处理结束,这个局部变量的生命周期也就结束了。1局部变量的声明在使用一个局部变量之前,必须先声明该变量。声明一个局部变量的语法格式如下:DECLARE 变量名 变量类型,变量名 变量类型 声明语句中的各部分说明如下:局部变量名的命名必须遵循SQL Server的标识符命名规则,并且必须以字符“”开头。局部变量的类型可以是系统数据类型,也可以是用户自定义的数据类型。DECLARE语句可以声明一个或多个局部变量,变量被声明以后初值都是NULL。如语句DECLARE MyScore INT声明了一个整型局部变量MyScore。也可以在同一语句中声明
8、多个局部变量,例如:DECLARE Student_Name VARCHAR(20),Student_Address VARCHAR(60),10,2局部变量的赋值 局部变量被创建之后,系统将其初始值设为NULL。若要改变局部变量的值,可以使用SET语句或SELECT语句给局部变量重新赋值。SELECT语句的语法格式为:SELECT 变量名=表达式,变量名=表达式 SET语句的语法格式为:SET 变量名=表达式赋值语句中的各部分说明如下:变量名是准备为其赋值的局部变量。表达式是有效的SQL Server表达式,且其类型应与局部变量的数据类型相匹配。从语法格式中可看出,SELECT语句和SET语
9、句的区别在于使用SET语句一次只能给一个变量赋值,而在SELECT语句中可以一次给多个变量赋值。,局部变量,11,局部变量,例10-3:局部变量的赋值。USE StudentGO-声明局部变量DECLARE sname VARCHAR(30),sclassid VARCHAR(30)-使用SET语句给局部变量赋值SET sname=李佳佳SET sclassid=2005011-根据局部变量的值查询符合条件的记录的姓名和性别SELECT Student_name,Student_sex,Student_classidFROM Students WHERE Student_name=sname
10、OR Student_classid=sclassid-将Student_id为11001的记录的姓名和班级赋值给局部变量SELECT sname=Student_name,sclassid=Student_classidFROM Students WHERE Student_id=11001-输出变量sname和sclassid的值SELECT sname AS sname,sclassid AS sclassidGO,12,局部变量,本例主要完成了两个操作,一是根据局部变量的初值在Students表中查询符合条件的记录,二是将指定记录的姓名及班级号的值赋给局部变量,改变局部变量原来的值并输
11、出其新值。程序的运行结果如图10.1所示。,图10.1 例10-3执行结果,13,局部变量,3局部变量的输出 例10-3中使用了SELECT语句来输出局部变量的值,除此之外局部变量的输出还可以使用PRINT语句。PRINT语句的语法格式如下:PRINT 局部变量名 如例10-3中最后的输出语句SELECT sname AS sname,sclassid AS sclassid也可以改写成如下的两条PRINT语句:PRINT snamePRINT sclassid,(四)全局变量,14,全局变量是以“”开头,由系统预先定义并负责维护的变量,也可以把全局变量看成是一种特殊形式的函数。全局变量不可以
12、由用户随意建立和修改,作用范围也并不局限于某个程序,而是任何程序均可调用。常用的全局变量有三十多个,通常用来存储一些SQL Server的配置值和效能统计数字,用户可以通过查询全局变量来检测系统的参数值或者执行查询命令后的状态值。在全局变量的使用过程中要注意,全局变量是由SQL Server服务器定义的,不是用户自定义的,用户只能使用预先定义的全局变量,且在引用全局变量时,必须以“”开头。另外,局部变量的名称不能与全局变量的名称相同,否则就会在应用程序中出错。表10-1中列出了SQL Server的几个常用全局变量及其含义,对于其他全局变量,读者可通过自行查阅SQL Server 2005联机
13、丛书进行学习。,表10-1 SQL Server的常用全局变量,15,全局变量,例10-4:全局变量ERROR的使用。USE StudentGO-在Teachers表中插入一条新记录INSERT INTO Teachers(Teacher_id,Teacher_name,Teacher_department)VALUES(JS006,张海涛,002)-使用全局变量ERROR输出错误代码的值SELECT ERROR AS 错误GO,图10.2例10-4执行结果,(五)运算符,16,使用T-SQL来编写例行程序时,不可避免的要使用到运算符。运算符用来完成一个或多个表达式中指定的操作,SQL Ser
14、ver中的运算符包括有:算术运算符、比较运算符、逻辑运算符、位运算符、赋值运算符、连接运算符。1算术运算符算术运算符用来执行算术运算,T-SQL中的算术运算符包括:+(加法运算符)-(减法运算符)*(乘法运算符)/(除法运算符)%(模运算符或取余运算符,返回一个除法的整数余数,要求数据类型为INT、SMALLINT和TINYINT),17,运算符,例10-5:计算算术表达式的值。DECLARE Value NUMERICSET Value=132%7PRINT Value 程序的运行结果如图10.3所示。2赋值运算符 T-SQL中的赋值运算符只有一个,就是“”(等号)。和其它语言中的赋值运算符
15、一样,T-SQL中的赋值运算符的作用就是将数据值指派给特定的对象。此外,也可以使用赋值运算符在列标题和列定义值的表达式之间建立关系。,图10.3 例10-5执行结果,18,运算符,例10-6:查询经济信息系所有教师的信息,要求输出时的列标题为:教师号、教师姓名、教师所在系,且要求教师所在系名显示为“信息系”。USE StudentGOSELECT 教师号=Teachers.Teacher_id,教师姓名=Teachers.Teacher_name,教师所在系=SUBSTRING(Departments.Department_name,3,3)FROM Teachers INNER JOIN D
16、epartmentsON Teachers.Teacher_department=Departments.Department_idWHERE Departments.Department_name=经济信息系GO,图10.4例10-6执行结果,19,运算符,3比较运算符 比较运算符用于比较两个表达式的大小,T-SQL中的比较运算符包括:(大于)、=(大于等于)、(小于)、=(小于等于)、=(等于)、!=,(不等于)、!(不大于)、!(不小于)。比较运算符的运算结果是布尔数据类型,它有三种可能的结果:TRUE、FALSE以及UNKNOWN。例10-7:查询Student_course表中成绩的
17、70%仍然大于60分的学生学号和原来的成绩。USE StudentGOSELECT Student_id,Student_gradeFROM Student_courseWHERE Student_grade*0.760 ORDER BY Student_id ASCGO,图10.5 例10-7执行结果,20,运算符,4逻辑运算符 逻辑运算符用来测试某些条件是否成立,T-SQL中的逻辑运算符包括:NOT(非运算符)AND(与运算符)OR(或运算符)非运算符,用于表示对条件的否定。与运算符用于连接查询条件,只有AND两边的条件的值都为真时,其结果值才为真。或运算符用于连接查询条件,只要OR两边的
18、条件中有一个为真,其结果值就为真。逻辑运算符和比较运算符一样,运算结果是布尔数据类型。那些返回布尔数据类型的表达式称为布尔表达式,T-SQL中的布尔表达式有三种可能的值,分别是TRUE、FALSE以及UNKNOWN,其中UNKNOWN是由值为NULL的数据参加运算得到的结果。表10-2、表10-3、表10-4列出了进行各种逻辑运算时不同情况得到的结果。,21,运算符,表10-2 NOT运算的各种结果,表10-3 AND运算的各种结果,表10-4 OR运算的各种结果,22,运算符,例10-8:请查询出所有家庭所在地为山西的男同学。USE StudentGOSELECT Student_id,St
19、udent_name,Student_sex,Student_homeFROM Students WHERE Student_home=山西 AND Student_sex=男GO,图10.6 例10-8执行结果,23,运算符,5位运算符位运算符用来对两个表达式进行位操作,位运算符的操作数允许是整型数据或者二进制数据(但image数据类型除外)。此外,位运算还要求两个操作数不能同时是二进制数据。T-SQL中的位运算符包括:&(按位与)|(按位或)(按位异或)(按位取反)例10-9:计算位运算表达式的值。SELECT 15&16 AS 按位与,15|16 AS 按位或,1516 AS 按位异或,
20、15 AS 按位取反,图10.7 例10-9执行结果,24,运算符,6连接运算符 T-SQL中的连接运算符“+”用于连接字符串或二进制数据串、列名或列的混合体,其实质就是将一个串加入到另一个串的尾部。例10-10:在输出Classes表中班级名称时前面加上班级所在系别,如“经济信息系电子商务1班”。USE StudentGOSELECT Classes.Class_id,Departments.Department_name+Classes.Class_nameFROM Classes INNER JOIN Departments ON Classes.Class_department=Dep
21、artments.Department_id GO,图10.8 例10-10执行结果,25,运算符,7运算符的优先级T-SQL中的运算符的处理顺序如表10-5所示。,表10-5 T-SQL运算符优先级,第三节 函数,26,为了让用户更方便的对数据库进行操作,SQL Server 2005在T-SQL中提供了许多内置函数。函数其实就是一段程序代码,用户可以通过调用内置函数并为其提供所需的参数来执行一些特殊的运算或完成复杂的操作。T-SQL提供的函数有系统函数、字符串函数、日期和时间函数、数学函数、转换函数等。,(一)系统函数,27,系统函数可以返回有关当前环境的信息,例如有关服务器、用户、数据库
22、对象的系统信息。常用的系统函数及其功能如表10-6所示。,表10-6 常用系统函数,28,系统函数,例10-11:系统函数的使用。SELECT 用户名=USER_NAME(),登陆名=SUSER_SID(),工作站名=HOST_NAME()该语句的运行结果如图10.9所示。例10-12:使用系统函数查询指定表的第一列的长度。USE StudentGODECLARE col_name VARCHAR(30)SELECT col_name=COL_NAME(OBJECT_ID(Students),1)SELECT COL_LENGTH(Students,col_name)AS 第一列长度GO,图1
23、0.9例10-11执行结果,图10.10例10-12执行结果,(二)字符串函数,29,字符串函数主要是为了方便用户对二进制数据、字符串和表达式进行操作。常用的字符串函数及其功能如表10-7所示。,30,字符串函数例题,例10-13:在Students表中查询所有2005级学生的学号、姓名、性别、出生日期及所在班级号。USE StudentGOSELECT Student_id,Student_name,Student_sex,Student_birthday,Student_classidFROM StudentsWHERE SUBSTRING(Student_classid,1,4)=200
24、5GO,图10.11例10-13执行结果,31,字符串函数例题,例10-14:在Users表中使用CHARINDEX()函数查询所有User_name中包含了字符串“ia”的记录的User_id。USE StudentGOSELECT User_id,User_nameFROM UsersWHERE CHARINDEX(ia,User_name)0GO程序的运行结果如图10.12所示。例10-15:在Users表中使用PATINDEX()函数查询所有User_name中包含了字符串“ia”的记录的User_id。USE StudentGOSELECT User_id,User_nameFROM
25、 UsersWHERE PATINDEX(%_ia_%,User_name)0GO程序的运行结果如图10.13所示。例10-14和例10-15可以反映PATINDEX()和CHARINDEX()的不同之处,虽然都是查找User_name中包含了字符串“ia”的记录的User_id,但是PATINDEX()函数中包含了指定字符串的格式,所以查找的结果就不相同。,图10.12例10-14执行结果,图10.13例10-15执行结果,(三)日期和时间函数,32,日期和时间函数用于对日期和时间数据进行运算和操作,其返回值为字符串、数字值或日期和时间值。常用的日期和时间函数及其功能如表10-8所示。表10
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第十 TSQL 程序设计
链接地址:https://www.31ppt.com/p-5116081.html