微课视频
课程视频2.5
在业务数据处理过程中,常用到标识符、常量、变量、函数和表达式,也可用操作语句构成函数、触发器或存储过程。
标识符(Identifier) 是指用于标识数据库对象名称的字符串,如服务器、数据库、表、视图、索引和存储过程等。操作数据库对象时需要标识符,如查询指定表的数据必须指定查询表的表名,也有一些对象是可选的标识符,如创建约束时的标识符由系统默认生成。按照其用法, 标识符分为两类 :常规标识符和界定标识符。
常规标识符(Regular Identifier) 又称 规则标识符 ,其 命名规则 如下。
1) 标识符 由字母、数字、下画线、@符号、#和$符号组成,其中字母可以是大小写英文字母或其他语言的字符,如表名“商品信息A — 1”。
2) 标识符的首字符 不能是数字或“$”符号。
知识拓展
@和#标识符及其用法
3)标识符不允许使用SQL保留字,如命令sp_help或函数名max、desc、asc等。
4)标识符内不允许有空格或特殊字符,如?、%、&、*等。
5)标识符的长度不能超过128个字符。
界定标识符 又称 分隔标识符 , 包括以下两种 。
1)方括号或引号。对不符合标识符命名规则的标识符,如标识符中包含SQL Server关键字或内嵌的空格和其他不是规则规定的字符时,要用界定标识符[]或双引号将其括起来。
2)空格和保留字。例如,在标识符[product name]和“insert”中,分别将界定标识符用于带有空格和保留字insert的标识符中。
说明:
1)符合标识符格式的可用标识符分隔,也可不分隔。对于不符合格式规则的标识符,必须进行分隔。例如,对标识符product Type Name必须进行分隔,分隔后的标识符为[product Type Name]或“product Type Name”。
2)使用分隔标识符的两种情况:①对象名称中包含SQL Server保留关键字时需要使用界定标识符,如[select];②对象名称中使用了未列入限定字符的字符,如[prodoct[1]table]。
3)引用标识符。默认情况下,只能使用括号作为界定标识符。如果使用引用标识符,则需要将Quoted_Identifier标志设为ON。
【案例2-23】 常规标识符应用示例。规范的常规标识符应用如_Product、Company、课程数据表、Customer_01、Product_Type_Name等,不规范的常规标识符应用如tbl product、productName&123等。
在SQL Server中,常用操作需要指定列、常量、变量、表达式和参数等对象的数据类型。 指定对象的数据类型 相当于 定义该对象的以下特性 。
1)对象所含的数据类型,如字符型、整数型、货币型。
2)每列所存储的数据项(字段)值的长度(宽度)或大小。
3)数值精度、小数位数(仅用于数值数据类型)。
SQL Server提供的系统数据类型如表2-23所示。
表2-23 SQL Server系统数据类型
常量 是指在 程序运行过程中其值保持不变的量 。常量是表示一个特定数据值的符号,也称为文字值或标量值。其格式取决于它所表示的值的数据类型,具体数据类型如表2-23所示。
根据不同的数据类型,常量可分为 字符型常量、整型常量、日期时间型常量、实型常量、货币常量 和 全局唯一标识符 。
(1)字符型常量
字符型常量 由字母、数字字符(a~z、A~Z及0~9)和特殊字符(如!、@和#等字符)组成,通常放在单引号内。如果字符型常量中包含单引号字符,则需要使用两个单引号表示。例如,定义一个字符型常量I'm a student,应写成'I''m a student'。
字符型常量有两种 :ASCII和Unicode字符型常量。
知识拓展
Unicode字符型常量的用法
1)ASCII字符型常量。是由ASCII字符构成的字符串,应放在单引号内,如'abcd'。
2)Unicode字符型常量。在常量前面加一个N,如N'abcd'(其中,N必须大写,在SQL92标准中表示国际语言)。
(2)整型常量
整型常量 通常表示整数,主要包括二进制整数、十进制整数和十六进制整数,如二进制1100,十六进制0x4b等。
(3)日期时间型常量
日期时间型常量用于 表示日期或时间,常用单引号将所表示的日期或时间括在其中,如'2019-08-09''July-10-1998''08/24/1998'或'2020年8月9日'等。
(4)实型常量
实型常量用于 表示定点数或浮点数,如126.35、5E10。
(5)货币常量
货币常量 以货币符号开头,如 600.45。SQL Server不强制分组,每隔三个数字由一个逗号分隔。
(6)全局唯一标识符
全局唯一标识符 (Globally Unique IDentification numbers,GUID)由一个128位的二进制数组成(16字节),用于所有需要唯一标识的计算机和网址。
变量 是指在程序运行过程中其值可以发生变化的量,包括局部变量和全局变量 两种 。
(1)局部变量
局部变量 是由用户定义的其作用域局限在一定范围内的SQL对象。
作用域 :若局部变量在一个批处理、存储过程、触发器中被定义,则其作用域就是此批处理、存储过程、触发器。
局部变量的声明 语句格式 如下。
注意:
①局部变量名必须以@开头。
②局部变量必须先定义,然后在SQL语句中使用,默认值为NULL。
③数据类型要求为系统提供的类型、用户定义的数据类型或别名数据类型。变量不能是text、ntext或image数据类型。
知识拓展
变量命名和SET变量赋值
局部变量的 赋值语句的语法 如下。
格式一:SET@变量名=表达式
格式二:SELECT@变量名=表达式
或SELECT@变量名=输出值FROM表WHERE条件
或SELECT@变量名1=表达式1[,@变量名2=表达式2,…,@变量 n =表达式 n ]
【案例2-24】 利用SELECT命令为变量@bookName赋值,并通过此命令使变量输出结果(实际的具体书名)。
执行结果:
【案例2-25】 利用SELECT命令查询变量返回多个结果,并将最后一个结果值赋给变量。
执行结果:
【案例2-26】 利用SET和SELECT语句给局部变量no赋值的实际用法,并利用SELECT语句显示变量bookName的结果。
执行结果:
(2)全局变量
全局变量 是SQL Server系统定义并提供信息的变量。 用于 检测服务器及系统的运行情况。用户不能定义全局变量,也不能使用SET语句对全局变量进行赋值。
定义全局变量的格式 为:
SQL Server系统提供了33个全局变量,方便用户掌握SQL Server服务器的运行情况。常用的系统全局变量如表2-24所示。
表2-24 常用系统全局变量
函数 是指具有完成某种特定功能的程序,在SQL编程中也可理解为具有一定功能的SQL语句集合,其处理结果称为 返回值 ,处理过程称为 函数体 。
SQL Server提供了丰富的内置函数,且允许用户自定义函数。利用这些函数可以方便地实现各种运算和操作,常用SELECT查看函数的返回值(结果)。
SQL Server提供的常用内置函数分为14类。每种类型的内置函数都可以完成某种类型的操作,其内置函数的分类如表2-25所示。
表2-25 SQL Server的内置函数的分类和功能
(1)聚合函数及其用法
聚合函数 又称为 统计函数 。所有聚合函数均为确定性函数,只要使用一组特定输入值(数值型)调用聚合函数,该函数就会返回同类型的值,其名称和功能如表2-26所示。
表2-26 常用聚合函数的名称及功能
注意: 在聚合函数中,除了COUNT函数以外,聚合函数均忽略空值。
【案例2-27】 查询图书表中价格最高的图书。下面是聚合函数的应用实例,注意其具体用法。
执行结果:
(2)数学函数及其用法
数学函数 用于对数字表达式进行数学运算并返回计算结果。SQL Server提供了20多个数学函数。常用的数学函数的名称及功能如表2-27所示。
表2-27 常用数学函数的名称及功能
(3)字符函数及其用法
字符函数 也称为 字符串函数 ,用于字符型数据的运算、格式化和处理字符型变量,或将对象转换为字符型。SQL Server提供的常用字符型函数的名称及功能如表2-28所示。
由于字符函数在实际编程中的应用较为广泛,下面对表2-28中的每个函数给出相应的示例,示例如表2-29所示。
(4)日期时间函数及其用法
SQL Server提供了9个常用日期时间函数,其名称及功能如表2-30所示。
表2-28 常用字符函数的名称及功能
表2-29 常用字符函数应用示例
表2-30 常用日期时间函数的名称及功能
在SQL Server提供的日期时间函数中,一些日期时间函数常量及含义如表2-31所示。
表2-31 常用的日期时间函数常量及含义
【案例2-28】 常用的日期时间函数实际应用格式和方法。下面介绍日期时间函数的应用示例,注意其具体用法。
1)DATEADD函数示例。函数参数中,第一个参数是增加时间的类型,包括天、月、年等;第二个参数是增加数量;第三个参数是要增加的日期,返回值是增加日期后的时间。
2)DATEDIFF函数示例。
3)DATENAME函数示例
*2.自定义函数
SQL Server为了扩展和方便用户,提供了自定义函数,返回值是一个临时表或数值。自定义函数不支持输出参数(可用存储过程)。根据函数返回值形式不同,可创建三类自定义函数。
(1)标量值自定义函数
标量值自定义函数 的返回值是一个确定类型的标量值,其返回值类型为除text、ntext、image、timestamp和table类型之外的任意类型,即标量值自定义函数返回的是一个数值。
定义标量值自定义函数的语法结构 如下。
说明:
WITH子句指出了创建函数的选项。如果ENCRYPTION参数被指定,则创建的函数是被加密的,函数定义的文本将以不可读的形式存储在syscomments表中,任何人都不可查看该函数的定义,包括函数的创建者和管理员。
【案例2-29】 在Library示例数据库中创建函数,根据读者卡号查询该用户的借书数。
函数定义如下:
创建函数后执行以下语句:
执行结果:
(2)内联表值自定义函数
内联表值自定义函数 以表形式返回一个值(表的数据)。内联表值自定义函数没有BEGIN…END语句中包含的函数体,而直接用RETURNS子句,其中包含SELECT语句将数据从数据库中筛选形成的表。使用内联表值自定义函数可提供参数化的视图功能。
内联表值自定义函数的语法结构 如下。
【案例2-30】 在Library示例数据库中,创建函数根据读者卡号,查询该用户所借的所有图书。
执行语句:SELECT * FROM getBorrowBookList('2008213124')
执行结果:
(3)多语句表值自定义函数
多语句表值自定义函数 可看作标量值自定义函数和内联表值自定义函数的结合体。此类函数的返回值是一个表,但与标量值自定义函数一样,有一个BEGIN…END语句块中包含的函数体,返回值的表中的数据是由函数体中的语句插入的。因此,其可以进行多次查询,对数据进行多次筛选与合并,弥补了内联表值自定义函数的不足。
运算符 是指具体的运算符号,用于算术运算、字符串连接、赋值,或在字段、常量和变量之间进行比较。 主要有六大类运算符 :算术运算符、比较运算符、逻辑运算符、连接运算符、按位运算符、赋值运算符。在表达式中连接常量、变量和函数,需注意连接过程的优先级。
1)算术运算符。可以在两个表达式上执行数学运算,这两个表达式可以是任何数值数据类型。SQL Server 主要的算术运算符 如表2-32所示。
2)比较运算符。用于比较两个同类表达式的大小,表达式可以是字符、数字或日期型数据,其比较结果是boolean值。SQL Server主要的比较运算符如表2-33所示。
表2-32 主要的算术运算符
表2-33 主要的比较运算符
3)逻辑运算符。可将多个逻辑表达式连接运算,返回TRUE、FALSE或UNKNOWN的boolean数据类型值。SQL Server的 常用逻辑运算符 如表2-34所示。
表2-34 常用逻辑运算符
4)连接运算符。 连接运算符 (+)是字符串串联运算符,可以将多个字符串连接合并成一个新字符串。
5)按位运算符。 按位运算符 在两个表达式之间执行位操作,其中的两个表达式可以是整数数据类型中的任何数据类型。SQL Server主要的按位运算符如表2-35所示。
此外,还有赋值运算符(=)和一元运算符(+(取正)、-(取负)、~(按位取反))。
运算符的优先级 用于确定运算符与变量、常量、函数的运算顺序,其优先级从高到低如表2-36所示。若两个运算符的优先级相同,则按照从左到右的顺序进行运算。
表2-35 主要的按位运算符
表2-36 运算符的优先级
表达式 是指由常量、变量或函数等利用运算符按规则连接的式子,常用于“列”或“变量”运算。 表达式分为四类 :数学表达式、字符串表达式、比较表达式和逻辑表达式。
数学表达式 用于各种数字变量运算。常用的数据类型有int、smallint、tinyint、float、real、money和smallmoney。数学表达式符号主要是算术运算符(见表2-32)。
知识拓展
数学表达式适用的数据类型
字符串表达式 由字母、符号或数字组成。常用“+”实现字符或字符串的连接。在数据类型中,常用的数据类型有char、varchar、nvarchar、text,以及可以转换为char或varchar的数据类型。例如,在查询中执行以下代码,则变量str值为“Jsp&Oracle”。
【案例2-31】 三个字符串连接方法的实际应用。
执行结果:
比较表达式用于 两个表达式的比较。常用的比较运算符如表2-33所示。需要指出的是,比较表达式的运算优先级和数学表达式一样,并可使用“()”。
知识拓展
常用运算符的优先级
逻辑表达式有三种连接符 :AND、OR、NOT。
1)AND表达式。当所有子表达式的值为真时,其逻辑表达式的值(结果)才为真,否则表达式的值为“假”。
2)OR表达式。只要有一个子表达式的返回值是“真”,其逻辑运算值即返回“真”。
3)NOT表达式。表达式的值为“真”并进行NOT运算后,其表达式的值为“假”,反之亦然。
表达式运算的优先级 按照运算符的优先级,从高到低依次为NOT、AND、OR。逻辑表达式 常用的数值型数据类型 为binary、varbinary、int smallint、tinyint、bit等,也可用于多个逻辑表达式的运算,只需要各个表达式的结果为“ TRUE ”或“ FALSE ”。
比较运算符或逻辑运算符组合成的多个表达式,其结果的数据类型为boolean,且值只能是三种情况之一:TRUE、FALSE或UNKNOWN。
讨论思考:
1)标识符有哪几种?其命名和使用规则分别是什么?
2)什么是常量、变量?它们之间的区别是什么?它们具体有哪些种类?
3)什么是函数?常用函数分为哪几类?功能分别是什么?
4)SQL Server提供哪些种类的运算符?其优先级如何排列?