1、2023年5月5日第1页第3章 T-SQL 语言基础教学目标教学重点教学过程2023年5月5日第2页教学目标教学目标l了解了解T-SQL的发展过程和分类的发展过程和分类l了解用户定义的数据类型创建、修改、删了解用户定义的数据类型创建、修改、删除和调用除和调用l掌握掌握T-SQL的流程控制语句的语法和使用的流程控制语句的语法和使用方法方法l掌握掌握SQL-Server的系统函数的分类,及常的系统函数的分类,及常用函数的用法用函数的用法l掌握用户自定义函数的方法掌握用户自定义函数的方法2023年5月5日第3页教学重点教学重点l掌握掌握T-SQL的流程控制语句的语法和使用的流程控制语句的语法和使用方
2、法方法l掌握掌握T-SQL的流程控制语句的使用的流程控制语句的使用,系统函系统函数的分类及常用函数的用法数的分类及常用函数的用法l掌握用户自定义函数的方法掌握用户自定义函数的方法2023年5月5日第4页教学过程教学过程lT-SQL语言概述l数据类型、常量和变量数据类型、常量和变量 l运算符和表达式运算符和表达式 l流程控制语句流程控制语句 l 函数函数 2023年5月5日第5页3.1 T-SQL语言概述3.1.1 T-SQL语言发展过程和分类lSQL(Structure Query Language)中文译为)中文译为“结构化结构化查询语言查询语言”,l最初在最初在1974年由年由Boyce和
3、和Chambedin提出,称为提出,称为“SEQUEL”,是是Structure English QUEry Language的的缩写。缩写。l1976年,年,San Jose Reserch Laboratory在研制关系型在研制关系型数据库管理系统数据库管理系统System R时,对其进行修改,并称为时,对其进行修改,并称为“SEQUEL2”即当前使用的即当前使用的SQL语言。语言。l1982年年ANSI(American Nation Standards Instiute,美美国国家标准协会)确认国国家标准协会)确认SQL为数据库系统的工业标准,即为数据库系统的工业标准,即SQL-86,
4、l此后此后SQL的标准几经修改和完善。目前最新的的标准几经修改和完善。目前最新的SQL标准是标准是2003年制定的年制定的ISO/IEC 9075:2003,即,即SQL:2003(SQL4)。2023年5月5日第6页l目前,不同的数据库产品厂商在各自目前,不同的数据库产品厂商在各自的数据库系统中都支持的数据库系统中都支持SQL语言,但语言,但又在此标准基础上针对各自的产品对又在此标准基础上针对各自的产品对SQL进行了不同的修改和扩充。进行了不同的修改和扩充。l例如例如Oracle的的P/L SQL、Sybase的的SQLAnywhere等。而等。而T-SQL则是则是Microsoft针对其自
5、身的数据库产品针对其自身的数据库产品SQL Server设计开发的并遵循设计开发的并遵循SQL标标准的结构化查询语言准的结构化查询语言.2023年5月5日第7页T-SQL语言要素语言要素 数据定义语言(数据定义语言(DDL,Data Definition Language):):基本关系表、视图、索引和完整性约束的定义、修改和删基本关系表、视图、索引和完整性约束的定义、修改和删除。除。数据操纵语言(数据操纵语言(DML,Data Manipularion Language):):是指对已创建的数据库对象中的数据表数据的添加、修改是指对已创建的数据库对象中的数据表数据的添加、修改和删除。和删除。
6、数据控制语言(数据控制语言(DCL,Data Control Language):用来):用来设置或者更改数据库用户或者角色权限。设置或者更改数据库用户或者角色权限。系统存储过程(系统存储过程(System Stored Procedure):指系统):指系统中自带的程序。中自带的程序。一些附加的语言元素。这部分是一些附加的语言元素。这部分是Microsoft为了用户编程为了用户编程的方便而增加的语言要素。的方便而增加的语言要素。2023年5月5日第8页3.1.2 T-SQL语法约定1.语法书写约定UPPERCASE(大写)(大写)Transact-SQL 关键字。关键字。|(竖线)分隔括号或
7、大括号中的语法项。只能选择其中一项(竖线)分隔括号或大括号中的语法项。只能选择其中一项(方括号)可选语法项。不要键入方括号。(方括号)可选语法项。不要键入方括号。(大括号)(大括号)必选语法项。不要键入大括号。必选语法项。不要键入大括号。,.n指示前面的项可以重复指示前面的项可以重复 n 次。每一项由逗号分隔。次。每一项由逗号分隔。.n指示前面的项可以重复指示前面的项可以重复 n 次。每一项由空格分隔。次。每一项由空格分隔。2023年5月5日第9页;可选的可选的 Transact-SQL 语句终止符。不要语句终止符。不要键入方括号。键入方括号。:=语法块的名称。语法块的名称。此约定用于对可在语
8、句中的多个位置使用此约定用于对可在语句中的多个位置使用的过长语法段或语法单元进行分组和标记。的过长语法段或语法单元进行分组和标记。可使用的语法块的每个位置由括在尖括号可使用的语法块的每个位置由括在尖括号内的标签指示:内的标签指示:。2023年5月5日第10页2.多部分名称除非另外指定,否则,所有对数据库对象名的 Transact-SQL 引用可以是由四部分组成的名称,格式如下:server_name.database_name.schema_name.|database_name.schema_name.|schema_name.object_name。2023年5月5日第11页lserver
9、_name:指定链接的服务器名称或远程服务器名称。ldatabase_name:如果对象驻留在 SQL Server 的本地实例中,则指定 SQL Server 数据库的名称。如果对象在链接服务器中,则 database_name 将指定 OLE DB 目录。lschema_name:如果对象在 SQL Server 数据库中,则指定包含对象的架构的名称。如果对象在链接服务器中,则 schema_name 将指定 OLE DB 架构名称。lobject_name:对象的名称。引用某个特定对象时,不必总是指定服务器、数据库和架构供 SQL Server 2005 数据库引擎标识该对象。但是,如果
10、找不到对象,就会返回错误消息2023年5月5日第12页lOLE DB(Object Link and Embedding Database,对象,对象连接与嵌套数据库)是访问数据库的另一个统一的接口标连接与嵌套数据库)是访问数据库的另一个统一的接口标准,它建立在准,它建立在ODBC基础之上,不仅能够提供传统的数据基础之上,不仅能够提供传统的数据库访问,并且能够访问关系型数据库和非关系型数据库。库访问,并且能够访问关系型数据库和非关系型数据库。OLE DB其本质就是一个封装数据库访问的一系列其本质就是一个封装数据库访问的一系列COM接接口,使用口,使用COM接口不仅能够减少应用程序和数据库之间的
11、接口不仅能够减少应用程序和数据库之间的通信和交互,也能够极大的提升数据库的性能,让数据库通信和交互,也能够极大的提升数据库的性能,让数据库的访问和操作更加便捷。的访问和操作更加便捷。lODBC(Open Database Connection,开放式数据互连),开放式数据互连)是访问数据库的一个统一接口标准,它允许开发人员使用是访问数据库的一个统一接口标准,它允许开发人员使用ODBC API(应用程序接口)来访问多种不同的数据源,并(应用程序接口)来访问多种不同的数据源,并执行数据操作。执行数据操作。2023年5月5日第13页3.2数据类型、常量和变量3.2.1 数据类型1.系统的数据类型 系
12、统的数据类型是系统的数据类型是T-SQL内部支持的固有的数据类型,有关数据类型内部支持的固有的数据类型,有关数据类型的分类和说明在第的分类和说明在第2章已有详细说明。章已有详细说明。2.用户定义数据类型用户定义数据类型 T-SQL支持用户自定义数据类型,用户定义数据是在系统数据类型基支持用户自定义数据类型,用户定义数据是在系统数据类型基础上的扩充或限定。当对多表操作时,这些表中的某些列要存储同样础上的扩充或限定。当对多表操作时,这些表中的某些列要存储同样的数据类型,且对该数据类型有完全相同的基本类型(系统数据类的数据类型,且对该数据类型有完全相同的基本类型(系统数据类型)、长度和是否为空的规则
13、,这时用户可以定义数据类型,并在定型)、长度和是否为空的规则,这时用户可以定义数据类型,并在定义表中的这些列时使用该数据类型。义表中的这些列时使用该数据类型。用户定义数据类型的创建和删除可以采用两种方法。一种是图形化的用户定义数据类型的创建和删除可以采用两种方法。一种是图形化的方法,在方法,在SQL Server Management Studio中实现。另外一种是执行中实现。另外一种是执行命令的方法,即调用系统存储过程实现。命令的方法,即调用系统存储过程实现。2023年5月5日第14页1.图形化的方法创建和删除用户定义数据类型步骤如下(1)启动SQL Server Management St
14、udio,并连接到服务器。(2)在SQL Server Management Studio的对象资源管理器视图中的树型视图中依次展开以下节点:数据库/实例数据库/可编程性/类型/用户定义数据类型,在该项上右击,弹出菜单中选择“新建用户定义数据类型”。(3)单击“新建用户定义数据类型”菜单,打开“新建用户定义数据类型”窗口。在该窗口中填写相关各项。(4)单击“新建用户定义数据类型”窗口的“确定”按钮,回到SQL Server Management Studio可以在对象资源管理器的数型视图中查看到刚刚定义的数据类型。(5)在这种方式下也很容易删除已经存在的用户定义数据类型,所示的数据类型“xue
15、hao”项上点击右键,在弹出菜单中选择删除即可。2023年5月5日第15页2.调用系统的存储过程创建和删除用户定义数据类型l存储过程(存储过程(Stored Procedure)是一组为)是一组为了完成特定功能的了完成特定功能的TSQL语句集,经编译语句集,经编译后存储在后存储在SQL Server服务器端数据库中。服务器端数据库中。l优点:优点:允许用户进行模块化设计,提高了用户程序设计效率。允许用户进行模块化设计,提高了用户程序设计效率。减少网络通信流量。减少网络通信流量。2023年5月5日第16页在在SQL-Server中还可以通过调用系统定义的存储过程实现中还可以通过调用系统定义的存储
16、过程实现用户定义数据类型的创建和删除。创建用户定义数据类型用户定义数据类型的创建和删除。创建用户定义数据类型的创建语法格式如下:的创建语法格式如下:sp_addtype typename=type,phystype=system_data_type ,nulltype=null_type ;说明:说明:type:用户定义的数据类型的名称。该名称在数据库中:用户定义的数据类型的名称。该名称在数据库中必须是唯一的。必须是唯一的。system_data_type:该参数是用户定义的数据类型所基:该参数是用户定义的数据类型所基于的于的SQL Server提供的基本类型,例如提供的基本类型,例如int或
17、者或者char型。型。null_type:该参数指明用户定义的数据类型处理空值的:该参数指明用户定义的数据类型处理空值的方式。该参数有三个取值:方式。该参数有三个取值:null、not null或者或者nonull。其默认值为其默认值为null。2023年5月5日第17页例如,创建一个名为例如,创建一个名为“kechenghao”的新的用户定的新的用户定义数据类型,该类型的基类是义数据类型,该类型的基类是varchar,长度是,长度是6,不可以为不可以为null,在,在SQL Server Management Studio的查询分析器中输入以下程序,执行即可。的查询分析器中输入以下程序,执行
18、即可。USE 实例数据库实例数据库EXEC sp_addtype kechenghao,varchar(6),not nullGO2023年5月5日第18页如果要用命令删除用户定义数据类型,则要调用名如果要用命令删除用户定义数据类型,则要调用名为为sp_droptype的存储过程,该存储过程的语法的存储过程,该存储过程的语法为:为:sp_droptype typename=type其中的其中的type即是用户要删除的数据类型的名称,例即是用户要删除的数据类型的名称,例如要删除刚刚创建的如要删除刚刚创建的“kechenghao”的数据类型,的数据类型,则执行以下语句:则执行以下语句:USE 实例
19、数据库实例数据库EXEC sp_droptype kechenghaoGO2023年5月5日第19页3.应用用户定义数据类型定义字段创建用户自定义数据类型后,可以在创建表的字段时使用用户定义数据类型对某字段进行定义,可以在SQL Server Management Studio环境中使用,也可以调用命令使用。例如在SQL Server Management Studio环境创建表时,在选择字段的数据类型时可以直接选择已创建的用户定义数据类型2023年5月5日第20页也可以用命令形式指定字段使用用户定义数据类型,例如下面的程序段也可以用命令形式指定字段使用用户定义数据类型,例如下面的程序段中,对
20、中,对“学号学号”字段的定义就是采用的用户定义数据类型字段的定义就是采用的用户定义数据类型“xuehao”。USE 实例数据库实例数据库CREATE TABLE 学生表学生表学号学号 xuehao,姓名姓名 nchar(20)NOT NULL,性别性别 char(2)NULL,出生日期出生日期 smalldatetime NULL,入学日期入学日期 smalldatetime NULL,院系名称院系名称 varchar(20)NULL,备注备注 text NULL,GO2023年5月5日第21页3.2.2 常量1.字符串字符串常量代表特定的一串字符,在使用时用单引号括起来。例如:字符串常量代表
21、特定的一串字符,在使用时用单引号括起来。例如:Hello计算机计算机如果字符串中要包含单引号,则使用两个单引号表示,例如:如果字符串中要包含单引号,则使用两个单引号表示,例如:He say:Hello!可以在字符串内包含字母和数字字符(可以在字符串内包含字母和数字字符(az、AZ和和09)以及特殊的字)以及特殊的字符,例如感叹号(!)、符,例如感叹号(!)、at字符(字符()和数据号()和数据号(#)。)。2.Unicode字符串Uicode字符串也属于字符串的一种表达形式,它的格式与普通的字符串字符串也属于字符串的一种表达形式,它的格式与普通的字符串类似,不同的是在使用时前面加上一个类似,不
22、同的是在使用时前面加上一个N标识符(标识符(N必须为大写),必须为大写),例如:例如:NHelloN计算机计算机2023年5月5日第22页3.整型常量根据整型的进制不同,整型又可以分为十进制常量、二进制根据整型的进制不同,整型又可以分为十进制常量、二进制常量和十六进制常量。其中十进制常量以普通的整数表示。常量和十六进制常量。其中十进制常量以普通的整数表示。二进制常量即数字二进制常量即数字0和和1。十六进制常量在使用时加上前缀。十六进制常量在使用时加上前缀0 x。例如:。例如:200 /*十进制数十进制数-2958 /*十进制数十进制数0 /*十进制数,也可以认为是二进制数,二者在数十进制数,也
23、可以认为是二进制数,二者在数值上相等。值上相等。0 x60A2 /*十六进制数,代表十进制十六进制数,代表十进制247380 xE5f /*十六进制数,代表十进制十六进制数,代表十进制3679 2023年5月5日第23页4.实型常量实型常量实型常量是包含有小数点的数字,分为定点表示和浮点表示两种。例如:32.50 /*定点表示的实型常量25.8E4 /*浮点表示的实型常量,其值为25.81043.2E-2 /*浮点表示的实型常量,其值为3.210-2-2E6 /*浮点表示的实型常量,其值为-21065.日期时间常量日期时间常量使用特定格式的日期值字符来表示日期和时间常量。在使用时用单引号引起来
24、。在SQL Server中系统可以识别多种格式的日期时间常量。例如:2007-01-01 /*数字日期格式3/12/1995 /*数字日期格式Febrary 2,2000 /*字母日期格式20050825 /*未分割的字符串日期格式12:00:00 /*时间格式05:30:PM /*时间格式2007-10-10 08:40:30 /*日期时间格式2023年5月5日第24页6.货币常量货币常量货币常量代表货币的多少,通常采用整型或者实型常量加上$前缀构成,例如:$1234.56-$2007.唯一标识常量唯一标识常量唯一标识常量用于表示全局唯一标识符(GUID)的字符串。可以使用字符或者二进制字符
25、串指定。例如:6A526F-88C635-DA94-0035C4100FC0 xfa35998cc44abe3e60028d5daf279ff2023年5月5日第25页3.2.3 变量l变量是指在程序的执行过程中可以改变的变量是指在程序的执行过程中可以改变的量,变量可以保存特定类型的值。变量包量,变量可以保存特定类型的值。变量包括变量名和数据类型两个属性。在括变量名和数据类型两个属性。在SQL Server2005中,变量的作用域大多是局部中,变量的作用域大多是局部的,也就是说,在某个批处理或者存储过的,也就是说,在某个批处理或者存储过程中,变量的作用范围从声明开始,到该程中,变量的作用范围从
26、声明开始,到该批处理或者存储过程结束批处理或者存储过程结束 2023年5月5日第26页1.变量的命名规则变量的命名要符合标识符的命名规则:变量的命名要符合标识符的命名规则:以以ASCII字母、字母、Unicode字母、下画线、字母、下画线、或者或者开头,后续可以为一个或多个开头,后续可以为一个或多个ASCII字母、字母、Unicode字母、下画线、字母、下画线、或者、或者$,但整个标但整个标识符不能全部是下画线、识符不能全部是下画线、或者。或者。标识符不能是标识符不能是T-SQL的关键字。的关键字。标识符中不能嵌入空格,或者其他的特殊字符。标识符中不能嵌入空格,或者其他的特殊字符。如果要在标识
27、符中使用空格或者如果要在标识符中使用空格或者T-SQL的关键字的关键字以及特殊字符,则要使用双引号或者方括号将该以及特殊字符,则要使用双引号或者方括号将该标识符括起来。标识符括起来。2023年5月5日第27页2.局部变量的声明和赋值用用DECLARE语句声明语句声明T-SQL的变量,声明的同时可以指定的变量,声明的同时可以指定变量的名字(必须以变量的名字(必须以开头)、数据类型和长度,并同时开头)、数据类型和长度,并同时将该变量的值设置为将该变量的值设置为NULL。如果要为变量赋值,则使用如果要为变量赋值,则使用SET语句直接赋值,或者使用语句直接赋值,或者使用SELECT语句将列表中当前所引
28、用的值为变量赋值。下面语句将列表中当前所引用的值为变量赋值。下面通过几个具体的例子说明局部变量的声明和赋值。通过几个具体的例子说明局部变量的声明和赋值。【例【例3-1】下面的语句创建了】下面的语句创建了int类型的局部变量,其名字为类型的局部变量,其名字为var,由于没有为该变量赋值,则该变量的初始值为,由于没有为该变量赋值,则该变量的初始值为NULL。DECLARE var int可以用可以用DECLARE语句依次声明多个变量,各个变量之间用语句依次声明多个变量,各个变量之间用逗号逗号“,”隔开。隔开。2023年5月5日第28页【例【例3-2】下面的语句创建了三个局部变量,名称分别为】下面的
29、语句创建了三个局部变量,名称分别为var1,var2,var3,并用,并用SET语句分别为三个变量赋值。语句分别为三个变量赋值。DECLARE var1 nvarchar(10),var2 nchar(5),var3 intSET var1=redSET var2=yellowSET var3=10为变量赋值后,可以用为变量赋值后,可以用SELECT语句查看变量的值。语句查看变量的值。【例【例3-3】下面的语句创建变量并赋值,然后用】下面的语句创建变量并赋值,然后用SELECT语句返回该变量语句返回该变量的值。的值。DECLARE xuehao intSET xuehao=5SELECT xu
30、ehao在查询分析器中执行以上语句后,在结果窗口会显示出变量在查询分析器中执行以上语句后,在结果窗口会显示出变量“xuehao”的值:的值:“5”。2023年5月5日第29页在语句中,还可以使用在语句中,还可以使用SELECT语句将数据表中的语句将数据表中的内容赋值给定义的变量。内容赋值给定义的变量。【例【例3-4】该例中,将选课表中学号为】该例中,将选课表中学号为20050201的的学生的分数赋值给变量学生的分数赋值给变量fenshu,并将该变量的,并将该变量的值显示在结果窗口中。值显示在结果窗口中。DECLARE fenshu intSELECT fenshu=分数分数FROM 选课表选课
31、表WHERE 学号学号=20050201SELECT fenshu AS 分数分数2023年5月5日第30页3.全局变量全局变量是全局变量是SQL Server系统内部使用的变量,其作用范围系统内部使用的变量,其作用范围并不局限于某个程序,而是任何程序任何时间都可以调用。并不局限于某个程序,而是任何程序任何时间都可以调用。全局变量通常用于存储一些全局变量通常用于存储一些SQL Server的配置设定值和的配置设定值和效能统计数据。可以利用全局变量来测试系统的设定值或效能统计数据。可以利用全局变量来测试系统的设定值或者者T-SQL的命令执行后的状态值的命令执行后的状态值。例如例如CONNECTI
32、ONS:返回自最近一次启动:返回自最近一次启动SQL Server以以来连接或试图连接的次数。来连接或试图连接的次数。DATEFIRST:返回:返回SET DATEFIRST参数的当前值,参数的当前值,SET DATEFIRST参数用于指定每周的第一天是周几。例参数用于指定每周的第一天是周几。例如如1对应周一,对应周一,7对应周日。对应周日。2023年5月5日第31页【例【例3-5】CONNECTIONS的使用。返回连接的使用。返回连接次数。次数。SELECT CONNECTIONS AS 连接次数连接次数【例【例3-6】DATEFIRST的使用。将星期五设为的使用。将星期五设为每周的第一天,
33、假设今天是星期三,则今天是该每周的第一天,假设今天是星期三,则今天是该周的第周的第6天天SET DATEFIRST 5SELECT DATEFIRST AS 第一天第一天,DATEPART(dw,GETDATE()AS 今天今天2023年5月5日第32页3.3运算符和表达式l运算符是一种符号,用来指定要在一个或者多个运算符是一种符号,用来指定要在一个或者多个表达式中执行的操作。在表达式中执行的操作。在SQL Server2005中所中所使用的运算符包括算术运算符、赋值运算符、按使用的运算符包括算术运算符、赋值运算符、按位运算符、字符串连接运算符、比较运算符、逻位运算符、字符串连接运算符、比较运
34、算符、逻辑运算符和一元运算符。辑运算符和一元运算符。l表达式是标识符、值和运算符的组合,它可以是表达式是标识符、值和运算符的组合,它可以是常量、函数、列名、变量、子查询等实体,也可常量、函数、列名、变量、子查询等实体,也可以用运算符对这些实体进行组合而成。以用运算符对这些实体进行组合而成。2023年5月5日第33页1.算术运算符算术运算符可以用于任何计算,包括:加(算术运算符可以用于任何计算,包括:加(+)、减()、减(-)、乘()、乘(*)、除)、除(/)、求余()、求余(mod)。如果一个表达式中包括多个运算符,计算时)。如果一个表达式中包括多个运算符,计算时要有先后顺序。要有先后顺序。如
35、果表达式中的所以的运算符都具有相同的优先级,则执行顺序为从左如果表达式中的所以的运算符都具有相同的优先级,则执行顺序为从左到右;如果各个运算符的优先级不同,则先乘、除和求余,然后再加、到右;如果各个运算符的优先级不同,则先乘、除和求余,然后再加、减。减。【例【例3-7】将】将“选课表选课表”中各个成绩乘以中各个成绩乘以0.8后输出。后输出。SELECT 学号学号,课程号课程号,分数分数*0.8FROM 选课表选课表2.赋值运算符等号(等号(=)是)是T-SQL唯一的赋值运算符。可以将变量和常量赋值给变量,唯一的赋值运算符。可以将变量和常量赋值给变量,在赋值的过程中要主要赋值符号两边的量的数据类
36、型要一致或者可以在赋值的过程中要主要赋值符号两边的量的数据类型要一致或者可以相互转换。相互转换。2023年5月5日第34页3.按位运算符按位运算符包括按位运算符包括&(位与)、(位与)、(位非)、(位非)、|(位或)、(位或)、(位异或),主要用于(位异或),主要用于int、smallint和和tinyint类型数据的运算,其中类型数据的运算,其中(位非位非)还可以用于还可以用于bit数据。所数据。所有的按位运算符都可以在对有的按位运算符都可以在对T-SQL语句中转换成二元表达式的整数值进行运语句中转换成二元表达式的整数值进行运算。算。【例【例3-8】创建两个变量,对其赋值,并输出两个变量的】
37、创建两个变量,对其赋值,并输出两个变量的&(位与)、(位与)、|(位或)(位或)和和(位异或)的结果。(位异或)的结果。DECLARE var1 int,var2 intSET var1=22SET var2=147select var1&var2,var1|var2,var1var24.字符串连接运算符字符串连接运算符为加号(字符串连接运算符为加号(+),可以将两个或者多个字符串连接成一个字符串。),可以将两个或者多个字符串连接成一个字符串。例如:例如:SELECT 123+456语句的结果是语句的结果是123456。2023年5月5日第35页5.比较运算符比较运算符用于测试两个表达式的值是
38、否相同。比较的结果为逻辑值,可以取以比较运算符用于测试两个表达式的值是否相同。比较的结果为逻辑值,可以取以下三个值其中的一个:下三个值其中的一个:TRUE、FALSE和和UNKNOWN。比较运算符包括等于(比较运算符包括等于(=)、大于()、大于()、小于(、小于(=)、小于)、小于等于(等于(=)、不等于()、不等于(或者或者!=)、不小于()、不小于(!)。)。由比较运算符连接的表达式多用于条件语句(如由比较运算符连接的表达式多用于条件语句(如IF语句)的判断表达式中已经在语句)的判断表达式中已经在检索时的检索时的WHERE 子句中。子句中。【例【例3-9】将】将“实例数据库实例数据库”中
39、中“学生表学生表”的出生日期在的出生日期在1985年年9月月1号后的学号后的学生显示出来。生显示出来。USE 实例数据库实例数据库SELECT 学号学号,姓名姓名,出生日期出生日期FROM 学生表学生表WHERE 出生日期出生日期1985-09-01GO2023年5月5日第36页6.逻辑运算符逻辑运算符的运算结果为逻辑运算符的运算结果为TRUE或者或者FALSE。lAND:如果两个操作数的值为:如果两个操作数的值为TRUE,则结果为,则结果为TRUE。lOR:如果两个操作数其中一个为:如果两个操作数其中一个为TRUE,则结果为,则结果为TRUE。lNOT:如果操作数的值为:如果操作数的值为TR
40、UE,则结果为,则结果为FALSE。如果操作数的值是。如果操作数的值是FALSE,则结果为,则结果为TRUE。lALL:如果每个操作数的值都是:如果每个操作数的值都是TRUE,则结果为,则结果为TRUE。lANY:任意一个操作数的值为:任意一个操作数的值为TRUE,则结果为,则结果为TRUE。lBETWEEN:如果操作数在指定的范围内,则结果为:如果操作数在指定的范围内,则结果为TRUE。lEXISTS:如果子查询的结果包含一些行,则结果为:如果子查询的结果包含一些行,则结果为TRUE。lIN:如果操作数在一系列数中,则结果为:如果操作数在一系列数中,则结果为TRUE。lLIKE:如果操作数在
41、某些字符串中,则结果为:如果操作数在某些字符串中,则结果为TRUE。lSOME:如果操作数在某些值中,则结果为:如果操作数在某些值中,则结果为TRUE。在在SQL Server 2005中逻辑运算符最经常和中逻辑运算符最经常和SELECT语句的语句的WHERE子句子句配合使配合使用,查询符合条件的记录。用,查询符合条件的记录。2023年5月5日第37页7.一元运算符。一元运算符只对一个操作数或者表达式进行操作,一元运算符只对一个操作数或者表达式进行操作,该操作数或者表达式的结果可以是数字数据类型该操作数或者表达式的结果可以是数字数据类型中的任意一种。一元运算符包括三个:中的任意一种。一元运算符
42、包括三个:+(表示(表示该数值为正值),该数值为正值),-(表示该数值为负),(表示该数值为负),(返(返回数值的补数)。回数值的补数)。2023年5月5日第38页3.4 流程控制语句流程控制语句 T-SQL中提供流程控制语句的要素,流程控制语句是指那些中提供流程控制语句的要素,流程控制语句是指那些用来控制程序执行和流程分支的语句。用来控制程序执行和流程分支的语句。T-SQL中的主要的中的主要的流程控制语句如下所述。流程控制语句如下所述。lIFELSE:条件选择语句。:条件选择语句。lCASE表达式:多分支选择语句。表达式:多分支选择语句。lGOTO:无条件转移语句。无条件转移语句。lWHIL
43、E:循环语句。循环语句。lBREAK:循环跳出语句。循环跳出语句。lCONTINUE:重新开始下一次循环。重新开始下一次循环。lWAITFOR:设置语句执行的延迟时间。设置语句执行的延迟时间。lRETURN:无条件返回。无条件返回。lBEGINEND:定义语句块。定义语句块。2023年5月5日第39页3.4.1 IFELSE语句【例3-10】IF语句的使用。DECLARE pingyu char(10)IF(SELECT MIN(分数)FROM 选课表)=60SELECT pingyu=全部及格ELSESELECT pingyu=存在不及格PRINT pingyu2023年5月5日第40页3.
44、4.2 CASE语句CASE语句计算条件列表并返回多个可能结果表达式之一,其语法格式有两种。语句计算条件列表并返回多个可能结果表达式之一,其语法格式有两种。1.简单的CASE语句【例【例3-11】简单的】简单的CASE语句的使用。语句的使用。DECLARE var1 varchar(1)SET var1=BDECLARE var2 varchar(10)SET var2=CASE var1WHEN R THEN 红色红色WHEN B THEN 蓝色蓝色WHEN G THEN 绿色绿色ELSE 错误错误ENDPRINT var22023年5月5日第41页2.搜索类型的CASE语句【例3.12】D
45、ECLARE chengji float,pingyu varchar(40)SET chengji=80SET pingyu=CASE WHEN chengji100 or chengji=60 or chengji=70 or chengji=85 or chengji=100 then 优秀 ELSE 不及格ENDPRINT 该生的成绩评语是:+pingyu2023年5月5日第42页3.4.3 GOTO语句GOTO语句将执行语句无条件跳转到标签处,并从标签位置继续执行。语句将执行语句无条件跳转到标签处,并从标签位置继续执行。GOTO语句和标签可以在过程、批处理或语句块中的任何位置使用。语
46、句和标签可以在过程、批处理或语句块中的任何位置使用。【例【例3-13】利用】利用GOTO语句计算语句计算0100之间所有数的和。之间所有数的和。DECLARE x int,sum intSET x=0SET sum=0 xh:SET x=x+1SET sum=sum+xif x100 GOTO xhPRINT 1100所有数的和是:所有数的和是:+ltrim(str(sum)2023年5月5日第43页3.4.4 WHILE语句【例【例3-14】利用】利用WHILE语句计算语句计算0100之间所有数的和。之间所有数的和。DECLARE x int,sum intSET x=0SET sum=0W
47、HILE x100BEGINSET x=x+1SET sum=sum+xENDPRINT 1100所有数的和是:所有数的和是:+ltrim(str(sum)2023年5月5日第44页3.4.5 BREAK语句BREAK语句一般都出现在语句一般都出现在WHILE语句的循环体内,作为语句的循环体内,作为WHILE语句的子句。在语句的子句。在循环体内使用循环体内使用BREAK语句,会使进程提前跳出循环。语句,会使进程提前跳出循环。【例【例3-15】求】求1100之间的所有数之和,但是如果和大于之间的所有数之和,但是如果和大于1000,立刻跳出循环,立刻跳出循环,输出结果。输出结果。DECLARE x
48、 int,sum intSET x=0SET sum=0WHILE x1000BREAKENDPRINT 结果是结果是:+ltrim(str(sum)2023年5月5日第45页3.4.6 CONTINUE语句CONTINUE和和BREAK语句一样,一般都出现在语句一样,一般都出现在WHILE语句的循环体内,作为语句的循环体内,作为WHILE语句的子句。在循环体内使用语句的子句。在循环体内使用CONTINUE语句,结束本次循环,重新语句,结束本次循环,重新转到下一次循环。转到下一次循环。【例【例3-16】计算】计算1100所有偶数之和,并输出结果。所有偶数之和,并输出结果。DECLARE x i
49、nt,sum intSET x=0SET sum=0WHILE xpar2 SET par=par1 ELSE SET par=par2 RETURN(par)END2023年5月5日第63页(2)内联表值函数)内联表值函数内联表值函数创建语法和示例参见【例内联表值函数创建语法和示例参见【例3-33】。】。(3)多语句表值函数)多语句表值函数【例【例3-35】在】在“实例数据库中实例数据库中”创建函数创建函数“chengjibiao”。该函数以学号为实。该函数以学号为实参,通过调用该函数显示该生的各门参,通过调用该函数显示该生的各门功课的成绩。功课的成绩。CREATE FUNCTION che
50、ngjibiao(xuehao varchar(12)RETURNS chengji TABLE(xuehao nchar(12),xingming nchar(20),kecheng nchar(20),fenshu tinyint)ASBEGIN INSERT chengji SELECT 学生表学生表.学号学号,学生表学生表.姓名姓名,课程课程表表.课程名课程名,选课表选课表.分数分数 FROM 学生表学生表INNER JOIN 选课表选课表 ON(学生表学生表.学号学号=选课选课表表.学号学号)INNER JOIN 课程表课程表 ON(课程表课程表.课程号课程号=选选课表课表.课程号课
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。