数据库之第八讲:Transact-SQL语言基础.ppt

上传人:za****8 文档编号:15474508 上传时间:2020-08-12 格式:PPT 页数:88 大小:546.52KB
返回 下载 相关 举报
数据库之第八讲:Transact-SQL语言基础.ppt_第1页
第1页 / 共88页
数据库之第八讲:Transact-SQL语言基础.ppt_第2页
第2页 / 共88页
数据库之第八讲:Transact-SQL语言基础.ppt_第3页
第3页 / 共88页
点击查看更多>>
资源描述
1,Transact-SQL语言基础 (对应教材第6章) 电气信息工程学院自动化教研室 主讲教师:陈志武 Email:CHENYYJ163.COM,第六讲,2,主要内容,基本数据类型,2,常量与变量,3,运算符与表达式,4,流程控制语句,5,T-SQL语言简介,1,3,主要内容,注释,6,函数,7,4,一、历史,1、T-SQL语言简介,1、T-SQL语言起源于SQL( Structured Query Language )语言,SQL语言的历史: 70年代: 由IBM公司开发出来的;1976年开始在商品化关系数据库系统中应用; 1986:ANSI确认SQL为关系数据库语言的美国标准,1987年被ISO采纳为国际标准, 称为SQL-86; 1989: ANSI发布了SQL-89标准,后来被ISO采纳为国际标准; 1992: ANSI/ISO发布了SQL-92标准,习惯称为SQL 2;1999年: ANSI/ISO发布了SQL-99标准,习惯称为SQL 3; 2003: ANSI/ISO共同推出了SQL 2003标准。,5,一、历史,1、T-SQL语言简介,1、T-SQL语言起源于SQL( Structured Query Language )语言,Transact-SQL语言是Microsoft开发的一种SQL语言,简称T-SQL语言。它不仅包含了SQL-86和SQL-92的大多数功能,而且还对SQL进行了一系列的扩展,增加了许多新特性,增强了可编程性和灵活性。Transact-SQL语言主要包括: 数据定义语句(Data Definition Language,DDL) 如对数据库对象的创建(CREATE)、修改(ALTER)、 删除语句(DROP) 等,6,一、历史,1、T-SQL语言简介,1、T-SQL语言起源于SQL( Structured Query Language )语言,数据操纵语句(Data Manipulation Language,DML) 用来查询(SELECT)、添加(INSERT) 、修改(UPDATE) 、删除(DELETE)、数据库中数据的语句 数据控制语句(Data Control Language,DCL) 用来设置或更改 数据库用户或角色的语句。,7,一、历史,1、T-SQL语言简介,1、T-SQL语言起源于SQL( Structured Query Language )语言,一些附加的语言元素 如变量、函数、流程控制语句等,这些不是SQL-92的标准内容,8,二、标识符,2、标识符的分类: (1)常规标识符 (2)分隔标识符,1、标识符的定义: 标识符用于标识服务器、数据库、数据库对象、变量等。,1、T-SQL语言简介,9,二、标识符,1、T-SQL语言简介,1. 常规标识符 指符合标识符格式规则的标识符。标识符的格式规则如下: 长度不超过128个字符。 开头字母为a-z或A-Z、#、_ 或 以及来自其它语言的字母字符。 后续字符可以是a-z、A-Z、来自其它语言的字母字符、数字、#、$、_、。 不允许嵌入空格或其它特殊字符。 不允许与保留字同名。,10,二、标识符,1、T-SQL语言简介,2. 分隔标识符 对于不符合格式规则的标识符,当用于Transact-SQL语句时,必须用双引号或方括号括起来。 例如: SELECT * FROM My Table 等价于 SELECT * FROM My Table,11,二、标识符,1、T-SQL语言简介,对于常规标识符,可以加上双引号或方括号,也可以不加。 【例如: SELECT * FROM authors 该语句等价于 SELECT * FROM authors 也等价于 SELECT * FROM authors,12,三、语句符号约定,1、T-SQL语言简介,13,三、语句符号约定,1、T-SQL语言简介,例如,SELECT子句的语法如下: SELECT ALL | DISTINCT TOP n PERCENT WITH TIES 其中,语法块进一步定义如下: := * | 表名 | 视图名 | 表别名.* |列名|表达式|IDENTITYCOL|ROWGUIDCOL AS 列别名 | 列别名 = 表达式 ,.n ,14,2、基本数据类型,使用SQL Server创建数据库中的表时,要对表中的每一列定义一种数据类型,数据类型决定了表中的某一列可以存放什么数据。除了定义表需要指定数据类型外,使用视图、存储过程、变量、函数等都需要用到数据类型。 SQL Server提供了丰富的系统定义的数据类型,用户还可以在此基础上自己定义数据类型。,15,2、数据类型,1. bigint类型 存储大小: 8个字节,取值范围: -263263-1 2. int类型 存储大小: 4个字节,取值范围: -231231-1 3. smallint类型 存储大小: 2个字节,取值范围: -215215-1 4. tinyint类型 存储大小: 1个字节,取值范围: 0255,一、整形数据类型,16,2、数据类型,二、定点数据数据类型,定点数据类型用于表示定点实数,包括numeric和decimal类型。 Numeric等价于decimal。 格式: decimal(p, s) a numeric(p, s) b 说明: p: 表示精度,指定小数点左边和右边十进制数字的最大位数,取值在1到38之间,缺省值为18; s: 指定小数点右边十进数的最大位数,取值在0到p之间,缺省值为0。 表示范围: -1038+11038-1,17,2、数据类型,三、浮点数据类型,表示范围: -1.79E+3081.79E+308,1. float类型 格式: float(n) 说明: n: 尾数的位数,具体如下表:,18,2、数据类型,三、浮点数据,2. real类型 存储大小: 4个字节 取值范围: -3.40E+383.40E+38 精度: 7位 在SQL Server中,real的同义词为float(24)。,19,2、数据类型,四、字符型数据,分为Unicode字符数据类型和非Unicode字符数据类型. 非Unicode字符数据类型: 允许使用由特定字符集定义的字符。字符集在安装SQL Server时选择,不能更改。 非Unicode字符数据类型: char、varchar和text。 Unicode字符数据类型: 可存储由Unicode标准定义的任何字符,包含由不同字符集定义的所有字符。需要相当于非Unicode数据类型两倍的存储空间。 Unicode字符数据数据类型包括: nchar、nvarchar和ntext。对于存储来源于多种字符集的字符的列,可采用这些数据类型。,20,2、数据类型,四、字符型数据,1. char类型 格式: char(n) 功能: 定义长度为n个字节的固定长度非Unicode字符数据,每个字符占一个字节。 说明: n:18000 存储大小: n个字节(n个字符) 2. varchar类型 格式: varchar(n) 功能: 定义长度最多为n个字节的可变长度非Unicode字符数据,每个字符占一个字节。 说明: n: 18000。 存储大小: 输入字符的实际长度。长度可为零,21,2、数据类型,四、字符型数据,3. nchar类型 格式: nchar(n) 功能: 定义包含n个字符的固定长度Unicode字符数据 说明: n:14000 存储大小: 2n个字节 4. nvarchar类型 格式: nvarchar(n) 功能:定义包含最多n个字符的可变长度Unicode字符数据 说明: n: 14000。 存储大小:所输入的字符实际个数的两倍。长度可以为零。,22,2、数据类型,四、字符型数据,5. text类型 功能: 用于存储大块的非Unicode字符,长度可变,字符最大长度 存储空间等于输入字符个数 6. ntext类型 功能:用于存储大块的Unicode字符,长度可变,字符最大长度 存储空间等于输入字符个数的两倍,23,2、数据类型,五、日期与时间数据类型,日期和时间数据类型用于存储日期和时间的结合体。包括datetime和smalldatetime两种类型。 1. datetime类型 存储大小: 8个字节 表示范围:1753年1月1日零时9999年12月31日23时59分59秒。 例: 01/01/98 23:59:59 2000-5-29 12:30:48 2. smalldatetime 存储大小: 4个字节 表示范围: 1900年1月1日2079年6月6日。 例: 2000/05/08 12:35 2000-05-29 12:35 2000-05-29,24,2、数据类型,六、 图形(image)数据类型,image数据类型用于存储可变长度二进制数据,其长度界于0到231-1个字节之间。,25,2、数据类型,七、 货币数据类型,货币数据类型包括money和smallmoney数据类型。货币数据存储的精确度为四位小数。 1. money类型 存储大小: 8个字节 表示范围: -922,337,203,685,477.5808 +922,337,203,685,477.5807 2. smallmoney类型 存储大小: 4个字节 表示范围: -214,748.3648214,748.3647,26,2、数据类型,八、 位(bit)数据类型,bit数据类型的取值只有0和1,如果一个表中有不多于8个的bit列,这些列将作为一个字节存储。如果表中有9到16个bit列,这些列将作为两个字节存储。更多列的情况依此类推。,27,2、数据类型,九、 二进制数据类型,二进制数据类型又可以分为binary和varbinary类型。,1. binary类型 格式: binary(n) 功能: 定义固定长度的n个字节二进制数据,当输入的二进制数据长度小于n时,余下部分填充0。 说明: n: 18000,28,2、数据类型,九、 二进制数据类型,2. varbinary类型 格式: varbinary(n) 功能: 定义n个字节可变长度二进制数据。 说明: n: 18000 存储大小: 为实际输入数据长度加4个字节,而不是n个字节。输入的数据长度可能为0字节。 如果在数据定义或变量定义语句中使用时没有指定n,则默认长度n为1。如果在CAST函数中使用时没有指定n,则默认长度n为30。,29,2、数据类型,十、 其他数据类型,1. timestamp类型(时间戳数据类型) 存储大小: 8个字节。 时间戳类型的数据用于提供数据库范围内的惟一值,反映数据库中数据修改的相对顺序,相当于一个单调上升的计数器。当表中的某列定义为timestamp类型时,在对表中某行进行修改或添加行时,相应timestamp类型列的值会自动被更新。,30,2、数据类型,十、 其他数据类型,2. uniqueidentifier类型 用于存储一个16字节长的二进制数据,它是SQL Server根据计算机网络适配器和CPU时钟产生的全局惟一标识符(Globally Unique Identifier,GUID),该数字可以通过调用SQL Server的NEWID函数获得。 GUID是一个唯一的二进制数字,世界上的任何两台计算机都不会生成重复的GUID值。GUID主要用于在拥有多个节点、多台计算机的网络中,分配必须具有唯一性的标识符。,31,2、数据类型,十、 其他数据类型,3. sql_variant类型 用于存储除text、ntext、image、timestamp和sql_variant外的其它任何合法的数据。 4. table类型 用于存储对表或者视图处理后的结果集。这种新的数据类型使得用变量就可以存储一个表,从而使函数或过程返回查询结果更加方便、快捷。 5. cursor类型 cursor类型是变量或存储过程 的OUTPUT 参数的一种数据类型,这些参数包含对游标的引用。,32,2、数据类型,十一、 用户自己定义的数据类型,33,3、常量与变量,一、 常量,常量也称为标量值,是表示一个特定数据值的符号。常量的格式取决于它所表示的值的数据类型。,1. 普通字符串常量 字符串常量用单引号括起来。如果要在字符串中包含单引号,则可以使用连续的两个单引号来表示。例如: Chinese Process X is 50% complete. The level for job_id: %d should be between %d and %d. (空字符串) Iam a student,34,3、常量与变量,一、 常量,2、 Unicode 字符串常量 对于Unicode字符串的格式,需要在前面加一个N标识符,N前缀必须是大写字母。例如: Michl是字符串常量 NMichl是Unicode字符常量 Unicode常量被解释为Unicode数据。Unicode 数据中的每个字符都使用两个字节进行存储,而普通字符数据中的每个字符则使用一个字节进行存储。,35,3、常量与变量,一、 常量,3. 二进制数常量 二进制常量使用0 x作为前辍,后面跟随十六进制数字字符串。例如: 0 xAE 0 x12Ef 0 x69048AEFDD010E 0 x(空二进制常量),36,3、常量与变量,一、 常量,4. bit常量 bit常量使用数字0或1表示。如果使用一个大于1的数字,它将被转换为1。 5. datetime常量 datetime常量使用单引号括起来的特定格式的字符日期值表示。例如: April 15, 1998 15 April, 1998 980415 04/15/98 14:30:24 04:24 PM,37,3、常量与变量,一、 常量,6. 整型常量 由正、负号和数字09组成,正号可以省略。 例如: 1894 2 +145345234 -2147483648 7. decimal常量 由正、负号、小数点、数字09组成,正号可以省略。 例如: 1894.1204 2.0 +145345234.2234 -2147483648.10,38,3、常量与变量,一、 常量,8. float和real常量 使用科学记数法表示。 例如: 101.5E5 0.5E-2 +123E-3 -12E5 9. money常量 以可选小数点和可选货币符号作为前缀的一串数字。可以带正、负号。 例如: $12 $542023.14 -$45.56 +$423456.99,39,3、常量与变量,二、变量,变量是可以保存特定类型的单个数据值的对象,SQL Server的变量分为两种:用户自己定义的局部变量和系统提供的全局变量。,1、局部变量 局部变量的作用范围仅限制在程序的内部。常用来保存临时数据。例如,可以使用局部变量保存表达式的计算结果,作为计数器保存循环执行的次数,或者用来保存由存储过程返回的数据值。,40,3、常量与变量,二、变量,1. 局部变量的定义 格式: DECLARE 局部变量名 数据类型 ,n 说明: 局部变量名: 必须以开头,符合标识符的命名规则 数据类型: 系统定义的数据类型;用户定义数据类型。不能是text、ntext或image数据类型。 局部变量定义后初始值为NULL。,41,3、常量与变量,二、变量,1. 局部变量的定义,【例】定义变量MyCounter为int类型: DECLARE MyCounter int 【例】定义变量LastName为nvarchar(30)类型,定义变量FirstName为nvarchar(20)类型,定义变量State为nchar(2)类型: DECLARE LastName nvarchar(30), FirstName nvarchar(20),State nchar(2),42,3、常量与变量,二、变量,2. 局部变量的赋值 (1)用SET语句给局部变量赋值 格式: SET 局部变量名 = 表达式 【例4-6】定义局部变量myvar,并为其赋值,最后显示myvar的值。 DECLARE myvar char(20) SET myvar = This is a test -用SET赋值 PRINT myvar -用PRINT语句显示,43,3、常量与变量,二、变量,(2)用SELECT语句给局部变量赋值: 格式: SELECT 局部变量名 = 表达式,n 【例4-7】定义局部变量myvar1和myvar2,并为它们赋值,最后显示myvar1和myvar2的值: DECLARE myvar1 char(20),myvar2 char(20) SELECT myvar1 = Hello!, myvar2 = How are you! -用SELECT赋值 SELECT myvar1, myvar2 -用SELECT显示,44,3、常量与变量,二、变量,2、全局变量 是SQL Server系统自带的变量,特点如下: 全局变量不是由用户的程序定义的,它们是SQL Server系统在服务器级定义的,作用范围是一个服务器内都有效。 全局变量通常用来存储一些配置设定值和统计数据。用户可以在程序中用全局变量来测试系统的设定值或者是Transact-SQL命令执行后的状态值。,45,3、常量与变量,二、变量,用户只能使用预先定义的全局变量,不能自己定义全局变量。 全局变量,必须以标记符“”开头。 局部变量的名称不能与全局变量的名称相同,否则会出现不可预测的结果。 任何程序均可以随时引用全局变量。,例如: VERSION用于返回SQL Server当前安装的日期、版本和处理器类型;CONNECTIONS用于返回自上次启动SQL Server以来连接或试图连接的次数;LANGUAGE用于返回当前使用的语言名,46,4、运算符与表达式,一、运算符,SQL Server运算符有以下几类: 算术运算符 字符串串联运算符 赋值运算符 关系运算符 逻辑运算符 位运算符 一元运算符,运算符:对常量或变量进行某种运算的符号;由运算符与变量常量构成的式子称为表达式,47,4、运算符与表达式,一、运算符,1、算术运算符: +、*、/、%(取余) %: 用于返回一个整数除以另一个整数的余数。 例如: 13 % 5 = 3,48,4、运算符与表达式,一、运算符,2、字符串串联运算符: + 作用: 将两个字符串串联起来,构成字符串表达式。 例如: abc + def 结果为 abcdef 123 + 456 结果为 123456,49,4、运算符与表达式,一、运算符,3、赋值运算符: = 例如: DECLARE MyCounter int SET MyCounter = 1,50,4、运算符与表达式,一、运算符,4、关系运算符: = = != ! 作用: 比较两个表达式的大小。 比较结果: 布尔值TRUE、FALSE、UNKNOWN TRUE:表示表达式的结果为真 FALSE:表示表达式的结果为假 UNKNOWN: 当SET ANSI_NULLS为ON时,带有一个或两个NULL表达式的比较运算返回UNKNOWN。 当SET ANSI_NULLS为OFF时,上述规则同样适用,但当两个表达式都为NULL时,返回结果为TRUE。例如,NULL = NULL返回TRUE。,51,4、运算符与表达式,一、运算符,5、逻辑运算符: NOT AND OR 作用:对具有布尔值的表达式进行运算。 运算结果: TRUE、FALSE。 NOT: 一元运算符,对布尔表达式的值取反 AND: 只有两个布尔表达式的值都为TRUE,运算结果才为TRUE,否则结果为FALSE。 OR: 如果两个布尔表达式中的一个为TRUE,那么运算结果为TRUE。只有两个布尔表达式都为FALSE,运算结果才为FALSE。,52,4、运算符与表达式,一、运算符,例: NOT (3 8) 结果为TRUE (3 8) AND (5 8) Or (5 6) 结果为TRUE,53,4、运算符与表达式,一、运算符,6、位运算符: & | 作用: 在两个整型表达式之间执行按位操作 【例4-8】判断以下各打印语句的打印结果。 (1)PRINT 2 & 3 10 & 11,结果为二进制10,即打印2。 (2)PRINT 13 | 24 01101 | 11000,结果为二进制11101,即打印29。 (3)PRINT 13 24 01101 11000,结果为二进制10101,结果为21。,54,4、运算符与表达式,一、运算符,7一元运算符: + - (按位逻辑非) 作用: 只对一个表达式执行操作,55,4、运算符与表达式,二、运算符的优先顺序,1. +(正)、(负)、(按位NOT逻辑非) 2. *(乘)、/(除)、%(模) 3. +(加)、(+ 串联)、(减) 4. =, , =, , !=, !, !( 关系运算符) 5. (位异或)、&(位与)、|(位或) 6. NOT 7. AND 8. ALL、ANY、BETWEEN、IN、LIKE、OR、SOME 9. =(赋值),56,5、流程控制语句,流程控制语句用于控制Transact-SQL语句、语句块和存储过程的执行流程。 如果不使用流程控制语句,则各Transact-SQL语句按其出现的先后顺序执行。使用流程控制语句可以按需要控制语句的顺序。,一、流程控制语句的作用,57,5、流程控制语句,一、 BEGINEND语句,BEGINEND语句用于将多个Transact-SQL语句定义成一个语句块。语句块可以在程序中视为一个单元处理。BEGINEND语句的语法如下: BEGIN sql语句|语句块 END 其中,sql语句为一条Transact-SQL语句;语句块为用BEGIN和END定义的语句块。可以看出,在一个语句块中可以包含另一个语句块。,58,5、流程控制语句,二、 IFELSE语句,IFELSE语句的语法如下: IF 布尔表达式 sql语句1 | 语句块1 ELSE sql语句2 | 语句块2 布尔表达式: 返回TRUE或FALSE的表达式; sql语句: 一条Transact-SQL语句; 语句块: 用BEGIN和END定义的语句组。 功能: 当布尔表达式的值为TRUE时,执行sql语句1或语句块1;当布尔表达式的值为FALSE时,执行sql语句2或语句块2。如果省略ELSE部分,则表示当布尔表达式的值为FALSE时不执行任何操作。,59,5、流程控制语句,二、 IFELSE语句,【例4-15】已知pubs数据库的图书信息表titles中,表示书价的列为price,表示图书种类的列为type,表示书名的列为title。 编程序实现:如果mod_cook类图书的平均价格大于$15,就显示文本: Average title price is more than $15;否则给出提示“The following titles are excellent mod_cook books:”并列出相应的书名。,60,5、流程控制语句,二、 IFELSE语句,代码如下: USE pubs IF (SELECT AVG(price) FROM titles WHERE type = mod_cook) $15 BEGIN PRINT The following titles are excellent mod_cook books: PRINT SELECT title FROM titles WHERE type=mod_cook END ELSE PRINT Average title price is more than $15.,61,5、流程控制语句,三、 CASE语句,1. 简单CASE语句 CASE 输入表达式 WHEN when_表达式 THEN 结果表达式 .n ELSE 结果表达式 END 功能: 计算输入表达式的值,依次与每个WHEN子句中的when_表达式进行比较,直到发现第一个与输入表达式相等的表达式时,便返回该WHEN子句的THEN后面所指定的结果表达式。如果不存在与输入表达式相等的when_表达式,则当指定ELSE子句时将返回ELSE字句指定的结果表达式,若没有指定ELSE子句,则返回NULL值。,62,5、流程控制语句,三、 CASE语句,【例4-16】将pubs数据库中的图书信息表(titles)中的各种图书类型(type列)显示为全称。 USE pubs SELECT title, tpye = CASE type WHEN popular_comp THEN Popular Computing WHEN mod_cook THEN Modern Cooking WHEN business THEN Business WHEN psychology THEN Psychology WHEN trad_cook THEN Traditional Cooking ELSE Not yet categorized END, price FROM titles,63,5、流程控制语句,三、 CASE语句,2. CASE搜索语句 CASE WHEN 布尔表达式 THEN 结果表达式 .n ELSE 结果表达式 END 功能: 依次计算每个WHEN子句中的布尔表达式,返回第一个值为TRUE的布尔表达式之后对应的的结果表达式值。如果每一个WHEN子句之后的布尔表达式为都不为TRUE,则当指定ELSE子句时,返回ELSE子句中的结果表达式的值,若没有指定ELSE子句,则返回NULL值。,64,5、流程控制语句,三、 CASE语句,【例4-17】对pubs数据库中的各种价位的图书给予不同的提示。 USE pubs SELECT title, price, 价格类别 = CASE WHEN price IS NULL THEN Not yet priced WHEN price = 10 and price 20 THEN Coffee Table Title ELSE Expensive book! END FROM titles,65,5、流程控制语句,四、 WHILE语句,格式: WHILE 布尔表达式 sql语句 | 语句块 ,功能:从WHILE语句开始,计算布尔表达式的值,当布尔表达式的值为TRUE时,执行循环体,然后返回WHILE语句,再计算布尔表达式的值,如果仍为TRUE,则再执行循环体,直到某次布尔表达式的值为FALSE时,则不执行循环体,而直接执行WHILE循环之后的其他语句。,66,5、流程控制语句,四、 WHILE语句,在循环体中可以包含语句: BREAK语句 执行BREAK语句将完全跳出循环,结束WHILE循环的执行。 CONTINUE语句 执行CONTINUE语句将使循环跳过CONTINUE语句后面的语句,回到WHILE循环的第一条语句。,67,5、流程控制语句,四、 WHILE语句,【例4-18】求1到100之间的数的和。 DECLARE i smallint,sum smallint SET i=1 SET sum=0 WHILE i=100 BEGIN SET sum=sum+i SET i=i+1 END PRINT 1 到100之间的数的和为+str(sum),68,5、流程控制语句,三、 WHILE语句,求1到100之间的奇数的和 DECLARE i smallint,sum smallint SET i=0 SET sum=0 WHILE i=0 BEGIN SET i=i+1 IF i=100 IF (i % 2)=0 CONTINUE ELSE SET sum=sum+i ELSE BEGIN PRINT 1 到100之间的奇数和为+str(sum) BREAK END END,69,5、流程控制语句,五、 GOTO语句,格式: GOTO 标号 标号: 功能:用于改变程序的执行流程,使程序直接跳到标有标号的位置处继续执行,而位于GOTO语句和标号之间的语句将不会被执行。 说明: 标号必须是一个合法的标识符。,70,5、流程控制语句,五、 GOTO语句,【例4-19】利用GOTO语句求1+2+3+50。 DECLARE sum int, count int SET sum=0 SET count=1 label_1: SET sum=sum+count SET count=count+1 IF count=50 GOTO label_1 PRINT str(count)+str(sum),71,5、流程控制语句,六WAITFOR语句,格式: WAITFOR DELAY 时间 | TIME 时间 功能: 用于暂时停止SQL语句、语句块或者存储过程等的执行,直到所设定的时间已过或者所设定的时间已到才继续执行。 说明: DELAY: 使用该关键字表示其后的时间应为时间间隔,该时间间隔最长可达24小时. TIME: 使用该关键字表示其后的时间用于指示要等待到的时间点,格式为:hh: mm: ss。,72,5、流程控制语句,六WAITFOR语句,【例4-20】在一分钟以后打印“HELLO”,代码如下: BEGIN WAITFOR DELAY 00:00:30 PRINT HELLO END 【例4-21】在晚上10:20时打印“HELLO”。 BEGIN WAITFOR TIME 22: 20 PRINT HELLO END,73,5、流程控制语句,七 RETURN语句,格式: RETURN 整数表达式 功能: 用于无条件地终止一个查询、存储过程或者批处理,当执行RETURN语句时,位于RETURN语句之后的程序将不会被执行。 说明: RETURN: 在存储过程中可以在RETURN后面使用一个具有整数值的表达式,用于向调用过程或应用程序返回整型值。,74,5、流程控制语句,七 RETURN语句,例子: BEGIN WAITFOR DELAY 00:00:30 RETURN PRINT HELLO END,75,6、注释,一 注释的作用,注释用于对代码行或代码段进行说明,或暂时禁用某些代码行。注释是程序代码中不执行的文本字符串。使用注释对代码进行说明,可以使程序代码更易于理解和维护。注释通常用于说明代码的功能,描述复杂计算或解释编程方法,记录程序名称、作者姓名、主要代码更改的日期等。 向代码中添加注释时,需要用一定的字符进行标识。SQL Server支持两种类型的注释字符。,76,6、注释,二 注释的方法,(1) - : 这种注释字符可与要执行的代码处在同一行,也可另起一行。从双连字符开始到行尾均表示注释。对于多行注释,必须在每个注释行的开始使用双连字符。,【例4-22】使用双连字符给程序添加注释。 - 打开pubs数据库 USE pubs -从titles表中选择所有的行和列 -按title_id列的升序排序 SELECT * FROM titles ORDER BY title_id ASC,77,6、注释,二 注释的方法,(2) /* . */ : 可与代码处在同一行,也可另起一行,甚至用在可执行代码内。从/*到*/之间的全部内容均为注释部分。对于多行注释,必须使用/*开始注释,使用*/结束注释。注释行上不应出现其它注释字符。,【例4-23】使用/* . */给程序添加注释。 /*打开pubs数据库*/ USE pubs /*从titles表中选择所有的行和列 按title_id列的升序排序*/ SELECT * FROM titles ORDER BY title_id ASC,78,7、函数,一、函数的定义,函数是一个Transact-SQL语句的集合,每个函数用于完成某种特定的功能,可以在其他的Transact-SQL语句中直接使用(调用)。SQL Server 2000支持两种类型的函数: (1)内置函数:SQL Server内部已经定义好的函数,用户只能按照内置函数定义好的方式进行使用,而不能对内置函数进行修改。 (2)用户定义函数:用户使用CREATE FUNCTION语句自己创建的函数。,79,7、函数,一、函数的定义,T-SQL提供了用户定义函数创建语句CREATE FUNCTION。其语法格式为: CREATE FUNCTION schema_name. function_name /* 定义函数名 */ ( parameter_name AS type_schema_name. parameter_data_type /* 定义形参 */ = default /* 定义默认值 */ ,.n ) RETURNS return_data_type /* 定义函数返回数据类型 */ WITH ,.n /* 定义函数选项 */ AS BEGIN function_body /* 定义函数主体 */ RETURN scalar_expression /* 定义函数返回值 */ END,80,7、函数,二、函数的调用,调用函数的格式: 函数名(参数表) 说明: 参数: 0多个。当有多个参数时,各参数之间要用逗号隔开。 圆括号不能省略,即使没有参数也是如此。 调用位置:可在语句中,也可在表达式中。,81,7、函数,三、内置函数的分类,(1)行集函数:返回的结果是一个虚拟表对象,该对象可在Transact-SQL语句中用作表来引用。 例如,使用OPENQUERY函数执行一个分布式查询,以便从服务器OracleSvr中提取表student中的记录。 SELECT * FROM OPENQUERY(OracleSvr, SELECT name, id FROM student) (2)聚合函数:对一组值进行统计计算并返回一个单一的值。 例如,设当前数据库拥有一个员工工资表employee,其中有一个工资列salary,要统计所有员工的工资总和: SELECT SUM(salary) FROM employee (3)标量函数:用于对传递给它的一个或者多个参数值进行处理和计算,并返回一个单一的值。,82,7、函数,四、常用聚合函数举例,聚合函数用于对数据库表中的一列或几列数据进行统计汇总,常用于查询语句中。,83,7、函数,四、常用聚合函数举例,【例4-13】设某学生数据库中有一个“学生成绩”表,该表包含的列有:学号、姓名、数学成绩、英语成绩。其中,数学成绩和英语成绩列为smallint类型,使用聚合函数实现以下各功能。 (1)求所有学生的数学平均成绩和英语平均成绩。 (2)统计数学成绩大于80分的学生人数。 (3)统计学生总人数 (4)求最高数学成绩,最低数学成绩 (5)求所有学生的数学总成绩和英语总成绩。,84,7、函数,四、常用聚合函数举例,实现以上各功能的查询语句分别如下: (1)SELECT AVG(数学成绩),AVG(英语成绩) FROM 学生成绩 (2)SELECT COUNT(数学成绩) FROM 学生成绩 WHERE 数学成绩80 (3)SELECT COUNT(*) FROM 学生成绩 (4)SELECT MAX(数学成绩),MIN(数学成绩) FROM 学生成绩 (5)SELECT SUM(数学成绩),SUM(英语成绩) FROM 学生成绩,85,7、函数,五、常用标量函数举例,1、数学函数,2、字符串函数,3、日期和时间函数,4、转换函数,86,7、函数,六、常用转换函数举例,1、转换函数的作用,一般情况下,SQL Server会自动处理某些数据类型的转换。例如,如果比较smallint和int表达式、或不同长度的char表达式,SQL Server可以将它们自动转换成相同的类型,这种转换称为隐性转换。 无法由SQL Server自动转换的或者是SQL Server自动转换的结果不符合预期结果的,就需要使用转换函数做显式转换。SQL Server的提供了两个转换函数:CAST和CONVERT。,87,7、函数,六、常用转换函数举例,2、常用转换函数,1. CAST函数 用于将某种数据类型的表达式显式转换为另一种数据类型。 格式: CAST(表达式 AS 数据类型) 2. CONVERT函数 用于将某种数据类型的表达式显式转换为另一种数据类型,在将日期时间类型的数据转换为字符类型的数据时,可以指定转换后的字符样式。 格式: CONVERT(数据类型(长度),表达式,样式),88,本章完,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!