常量,变量,函数和表达式

2022-02-11  本文已影响0人  开心的小哈

在SQL 中 ,标识符指用于标识数据库对象名称的字符串。在SQL Server中,所有的数据库对象都可以有标识符,例如:服务器、数据库、表、视图、索引、触发器和存储过程等。
1.常规标识符
常规标识符又称规则标识符,常规标识符的命名规则如下:
1)标识符由字母、数字、下划线、@符号、#和$符号组成,其中字母可以是英文字母az或AZ,也可以是其他语言的字符,如表名:“学生信息表”。
2)标识符的首字符不能是数字或“$”符号。
3)标识符不能使用SQL的保留字,如:命令(sp_help)或函数名(max,min,desc,asc)。
4)标识符内能使用空格和特殊字符,如:?、%、&、*等。
5)标识符的长度不能超过128个字符。
2.界定标识符
界定标识符又称分隔标识符,包括以下两种:
1)方括号或引号。对不符合标识符命名规则的标识符,例如,标识符中包含SQL Server关键字或包含了内嵌的空格和其他不是规则规定的字符时,要使用界定标识符([])或双引号(“”)来将标识符括起来。
2)空格和保留字。例如,在标识符[product name]和“insert”中,分别将界定标识符用于带有空格和保留字insert的标识符中。
1)符合标识符格式的标识符既可以使用分隔,也可以不分隔。但是,对于不符合格式规则的标识符必须进行分格。例如:productName标识符既可以分隔也可以不分隔,分隔后的标识符为[productName];对于标识符 product Type Name则必须进行分隔,分隔后的标识符为[product Type Name]或“product Type Name”
2)需要使用分隔标识符的两种情况:
①对象名称中包含Microsoft SQL Sever保留关键时需要使用界定标识符,如[select]。
②对象名称中使用了未列入限定字符的字符,如[prodoct[1] table]。
3)引用标识符。默认情况下,只能使用括号分界定标符。如果想使用引用标识符,需要将Quoted_Identifier标志设为ON。
在SQL Server中,每个列、常量、变量、表达式和参数都有其各自的数据类型,指定对象的数据类型相当于定义了该对象的下列特性:
①对象所含的数据类型,如字符、整数、二进制数;
②所存储值的长度或大小;
③数值精度、小数位数(仅用于数值数据类型)
SQL Server中提供两类数据类型供用户选择:系统数据类型和用户自定义数据类型。
系统数据类型由SQL Server提供系统数据类型集,定义可供使用的所有数据类型,用户可直接使用上述数据类型。
用户定义数据类型是用户根据自己的实际需要在系统基本数据类型的基础上定义自己的数据类型,是出于系统可扩展性的需要和考虑

image.png
1.常量
常量是指在程序运行过程中其值保持不变的量。常量是表示一个特定数据值的符号,也称为文字值或标量值。
根据不同的数据类型,常量可分为字符型常量、整型常量、日期常量、实型常量、货币常量和全局唯一标识符。
(1)字符型常量。
字符型常量由字母、数字字符(a-z、A-Z 和 0-9)以及特殊字符,如感叹号 (!)、at 符 (@) 和数字号 (#)等字符组成。通常放在单引号内。如果字符型常量中包含单引号字符时,需要将使用两个单引号表示,例如,要定义一个字符型常量其值为I'm a student,则要写做'I''m a student'。
字符常量有两种:ASCII和Unicode字符型常量。
①ASCII字符型常量:用单引号引起来,由ASCII字符构成的字符串,如‘abcd’。
②Unicode字符型常量:通常在常量前面有一个N,如N'abcd'(其中的N在SQL92标准中表示国际语言,要求必须大写)。
2)整型常量
整型常量通常表示整数。主要包括二进制整型常量、十进制整型常和十六进制常量。分别举例如下:
二进制,如1100;
十进制,如2016;
十六进制,如0x4b,0x5a等。
(3)日期时间型常量
表示日期或时间的常量,要求用单引号将所表示的日期或时间引起来。例如:‘2016-08-09’、‘July-10-1998’、‘08/24/1998’和'2016年8月9日'等。
(4)实型常量
表示定点数或浮点数,如126.35、5E10。
(5)货币常量
以货币符号开头,如¥600.45。SQL Server不强制分组,每隔3个数字插入一个逗号进行分隔。
(6)全局唯一标识
全局唯一标识符(Globally Unique Identification Numbers,GUID)为16进制字节的二进制数据类型,是SQL Server根据计算机网络适配器地址和主机时钟产生的唯一号码生成的全局唯一标识符。
2.变量
变量是指在程序运行过程中其值可以发生变化的量,包括局部变量和全局变量两种。
(1)局部变量
局部变量是由用户定义,是作用域局限在一定范围内的SQL对象。
作用域:若局部变量在一个批处理、存储过程、触发器中被定义,则其作用域就是此批处理、存储过程、触发器。
局部变量的声明。局部变量的声明语句格式如下:
DECLARE @变量名1 [AS] 数据类型,@变量名2 [AS] 数据类型,...,@变量名n [AS]数据类型。
2.5.3常量和变量
注意:
①局部变量名必须以@开头。
②局部变量必须先定义,然后在SQL语句中使用,默认值为NULL。
③数据类型要求:系统提供的类型、用户定义的数据类型或别名数据类型。变量不能是text、ntext或image数据类型。
局部变的赋值。局部变量的赋值语名的语法如下:
格式一:
SET @变量名 = 表达式
格式二:
SET @变量名 = 表达式
或select @变量名=输出值 from 表where条件
或 select @变量名1=表达式1[,@变量名2=表达式2,...,@变量n=表达式n]
2.5.3常量和变量
             use Library
        go
        declare @bookName varchar(64)
        select @bookName = 书名
        from  books 
        select @bookName as ‘书名’

执行结果:
2.5.3常量和变量
(2)全局变量
系统全局变量是SQL Sever系统定义并提供赋值的变量。用于跟踪服务器范围和特定会话期间的信息,不允许用户显式定义、赋值或修改,也就是说用不能定义全局变量,也不能使用Set语句对全局变量进行赋值。
定义全局变量的格式如下:
@@变量名
SQL Server系统提供33个全局变量,用户方便用户监测或了解SQL Server服务器活动状态。常用的全局变量如表2-24所示,更多的请查SQL Server手册。


image.png

2.5.4 函数
函数是指具有完成某种特定功能的程序片段,在SQL编程中也可理解为能完成一定功能的 SQL语句集合,其处理结果称为返回值,处理过程称为函数体。
SQL Server与其它程序设计语言一样,提供了丰富的内置函数,而且允许用户自定义函数。利用这些函数可以方便地实现各种运算和操作,一般函数的返回值返回select请示。
2.5.4 函数
1.SQL Server常用函数用法
SQL Server提供的常用内置函数分为14类。每种类型的内置函数都可以完成某种类型的操作,其内置函数的分类如表2-25所示。


image.png
2.5.4 函数
(1)聚合函数
聚合函数又称为统计函数。所有聚合函数均为确定性函数,只要使用一组特定输入值(数值型)调用聚合函数,该函数就会返回同类型的值。
SQL Server提供的大量的聚合函数,表2-26列举了常聚合函数的名称和功能。
image.png
2.5.4 函数
 use Library
go
select *    from books
where 单价=(select max(单价)from books)

执行结果:


image.png

2.5.4 函数
(2)数学函数。
数学函数用于对数字表达式进行数学运算并返回计算结果。SQL Server提供了20多个用于处理整数与浮点值的数学函数。表2-27列举了部分常用数学函数。


image.png

2.5.4 函数
(4)日期时间函数
SQL Server提供了9个日期时间处理函数。其中的一些函数接datepart变元,此变元指定函数处理日期与时间所使用的时间粒度。表2-30列出datepart变元的可能设置。
SQL Server提供的9个常用日期时间函数如表2-31所示。


image.png
image.png
1)dateadd函数示例,该函数三个参数第一个参数是增加时间的类型,包括天、月、年等,第二个参数是增加数量,第三个参数为要增加的日期,返回值为增加日期数量后的时间。
select getdate() as '当前日期'
select dateadd(day,1,getdate()) as ‘当前日期加1天’

select dateadd(month,1,getdate()) as '当前日期加1月'
select dateadd(year,1,getdate()) as ‘当前日期加1年’
2)datediff函数
declare @end datetime
declare @start datetime
set @end=getdate()
set @start=dateadd(year,-2,@end)
select @start as '开始时间'
select @end as '结束时间'
select datediff(year,@start,@end) as ‘结束时间与开始时间的差’
2.5.4 函数
(3)字符函数
字符函数又称为字符串函数,用于计算、格式化和处理字符串变量,或将对象转换为字符串。与数学函数类似,为了方便用户进行字符型数据的各种操作和运算,SQL Server提供了功能全面的字符串处理函数,表2-28对常用的字符串处理函数进行简要介绍。


image.png
2.自定义函数
为了扩展性和方便用户,SQL Server提供自定函数功能。自定义函数可以接受零个或多个输入参数,其返回值是一个临时表或一个数值。但是需要特别指出的是自定义函数不支持输出参数,如果要使用输出参可以考虑使用后面章节中的存储过程。
在SQL Server中,用CREATE FUNCTION语句可创建自定义函数,根据函数返回值形式的不同,可创建三类自定义函数:标量值自定义函数、内联表自定义函数和多语句表值自定义函数。
1)标量值自定义函数
标量值自定义函数的返回值是一个确定类型的标量值,其返回值类型为除text、ntext、image、timestamp和table类型之外的任意类型,即标量值自定义函数返回的是一个数值。
定义标量值自定义函数的语法结构如下:
CREATE FUNCTION 函数名称(@参数1 类型1,[@参数2 类型2,...,@参数n 类型n])
RETURNS 返回值类型
[WITH ENCRYPTION]
[AS]
BEGIN
函数体语句序列
RETURN 返回值
END

定义

create function getbookIdF()
returns int
AS
begin declare @bookCount int 
set @bookCount=(select COUNT(书名) from boks)
return @bookCount
end

使用
select dbo.getbookIdF()
3)多语句表值自定义函数
多语句表值自定义函数可看作标量值和内联表值型自定义函数的结合体。此类函数的返回值是一个表,但与标量值自定义函数一样,有一个有BEGIN...END语句块中包含的函数体,返回值的表中的数据是由函数体中的语名插入的。因此,其可以进行多次查询,对数据进行多次筛选与合并,弥补了内联表自定义函数的不足。
运算符是一些符号,他们能够用于执行算术运算、字符串连接、赋值以及在字段、常量和变量之间进行比较。
在SQL Server中,运算符主要由以下6大类:算术运算符、赋值运算符、比较运算符、逻辑运算符、连接运算符以及按位运算符。运算符在表达式中起来连接变量、常量和函数的作用,同时在连接过程存在一定的优先级。下面对SQL Server中的运算和运算符的优先级进行简要论述。
1.运算符的种类
1)算术运算符
算术运算符可以在两个表达式上执行数学运算,这两个表达式可以是任何数值数据类型。SQL Server 主要的算术运算符见表2-32。
2)比较运算符
比较运算符用来比较两个表达式的大小,表达式可以是字符、数字或日期数据,其比较结果是Boolean值。SQL Server 主要的比较运算符见表2-33。


image.png

3)逻辑运算符
逻辑运算符可以把多个逻辑表达式连接起来测试,以获得其真实情况。返回带有TRUE、FALSE或UNKNOWN的Boolean数据类型。SQL Server 主要的逻辑运算符见表2-34。


image.png
4)连接运算符。
加号(+)是字符串串联运算符,可以将两个或两个以上字符串合并成一个字符串。
5)按位运算符
按位运算符在两个表达式之间执行位操作,这两个表达式可以为整数数据类型中的任何数据类型。SQL Server 主要的逻辑运算符见表2-35。
2.运算符的优先级
运算符的优先级决定了运算符与变量、常量和函数相结合和运算顺序,运算符的优先级从高到低如表2-36所示,如果两个运符优先级相同,则按照从左到右的顺序进行运算。
image.png
表达式是指由常量、变量或函数等通过运算符按规则连接起来的有意义的式子。表达式的运算常在“列与列”或者“变量”进行。
SQL Server中,表达主要分为四类:数学表达式、字符串表达式、比较表达式和逻辑表达式。
1.数学表达式
数学表达式用于各种数字变的运算。数字变量的类型有int、smallint、tinyint、float、real、money和smallmoney。用于数学表达式的符号主要为算术运算符(见表2-32)。
2.字符串表达式

字符串表达式是由字母、符号或数字组成。字符串表达式中,用“+”来实现字符或字符串的连接。在数据类型中,可用于字符串加法的数据类型有char、varchar、nvarchar、text和可以转换为char或varchar的数据类型。例如:在查询中执行以下代码,则变量str的值为“Jsp&Oracle”
2.5.6表达式
3.比较表达式
比较表式用于两个表达式的比较,常的比较表达式运算符见表2-33。需要指出的是比较表达式的执行优先级如同数学表达式一样,可以用“()”来人为设置。
4.逻辑表达式
在SQL Server中逻辑表式中,有三种连接符:AND、 OR 、NOT。
1)AND表达式
当所有表达式的值为真时,其逻辑表达式的值才为真;如果,有一个返回值为“假”,则表达式的值为“假”。
2)OR表达式
只要有一个子表达式的返回值为“假”,则其逻辑表达式的值即为“假”。
2.5.6表达式
4.逻辑表达式
3)NOT表达式
当表达式的值为“真”时,进行NOT运算后,其表达式值为“假”,反之亦然。

上一篇下一篇

猜你喜欢

热点阅读