SQL Server 2016从入门到精通(视频教学超值版)
上QQ阅读APP看书,第一时间看更新

4.5 运算符和表达式

运算符是一些符号,它们能够用于执行算术运算、字符串连接、赋值以及在字段、常量和变量之间进行比较。在SQL Server 2016中,运算符主要有以下5大类:算术运算符、比较运算符、逻辑运算符、连接运算符以及按位运算符。表达式在SQL Server 2016中也有非常重要的作用,SQL语言中的许多重要操作也都需要使用表达式来完成,本节将介绍各类运算符的用法和有关表达式的详细信息。

4.5.1 算术运算符

算术运算符可以在两个表达式上执行数学运算,这两个表达式可以是任何数值数据类型。Transact-SQL中的算术运算符如表4-3所示。

表4-3 Transact-SQL中的算术运算符

加法和减法运算符也可以对datetime和smalldatetime类型的数据执行算术运算。求余运算即返回一个除法运算的整数余数,例如表达式14%3的结果等于2。

4.5.2 比较运算符

比较运算符用来比较两个表达式的大小,表达式可以是字符、数字或日期数据,其比较结果是布尔值。

比较运算符测试两个表达式是否相同。除了text、ntext或image数据类型的表达式外,比较运算符可以用于所有的表达式。表4-4列出了Transact-SQL中的比较运算符。

表4-4 Transact-SQL中的比较运算符

4.5.3 逻辑运算符

逻辑运算符可以把多个逻辑表达式连接起来测试,以获得其真实情况。返回带有TRUE、FALSE或UNKNOWN值的Boolean数据类型。Transact-SQL中包含如下一些逻辑运算符:

  • ALL:如果一组的比较都为TRUE,那么就为TRUE。
  • AND:如果两个布尔表达式都为TRUE,那么就为TRUE。
  • ANY:如果一组的比较中任何一个为TRUE,那么就为TRUE。
  • BETWEEN:如果操作数在某个范围之内,那么就为TRUE。
  • EXISTS:如果子查询包含一些行,那么就为TRUE。
  • IN:如果操作数等于表达式列表中的一个,那么就为TRUE。
  • LIKE:如果操作数与一种模式相匹配,那么就为TRUE。
  • NOT:对任何其他布尔运算符的值取反。
  • OR:如果两个布尔表达式中的一个为TRUE,那么就为TRUE。
  • SOME:如果在一组比较中,有些为TRUE,那么就为TRUE。

4.5.4 连接运算符

加号(+)是字符串串联运算符,可以将两个或两个以上字符串合并成一个字符串。其他所有字符串操作都使用字符串函数(如SUBSTRING)进行处理。

默认情况下,对于varchar数据类型的数据,在INSERT或赋值语句中,空的字符串将被解释为空字符串。在串联varchar、char或text数据类型的数据时,空的字符串被解释为空字符串。例如,'abc' + '' + 'def'被存储为'abcdef'。

4.5.5 按位运算符

按位运算符在两个表达式之间执行位操作,这两个表达式可以为整数数据类型类别中的任何数据类型。Transact-SQL中的按位运算符如表4-5所示。

表4-5 按位运算符

4.5.6 运算符的优先级

当一个复杂的表达式有多个运算符时,运算符优先级决定执行运算的先后次序。执行的顺序可能严重地影响所得到的值。

运算符的优先级如表4-6所示。在较低级别的运算符之前先对较高级别的运算符进行求值,表4-6按运算符从高到低的顺序列出了SQL Server中的运算符优先级别。

表4-6 SQL Server运算符的优先级

当一个表达式中的两个运算符有相同的运算符优先级别时,将按照它们在表达式中的位置对其从左到右进行求值。当然,在无法确定优先级的情况下,可以使用圆括号()来改变优先级,并且这样会使计算过程更加清晰。

4.5.7 什么是表达式

表达式是指用运算符和圆括号把变量、常量和函数等运算成分连接起来的有意义的式子,即使单个的常量、变量和函数也可以看成是一个表达式。表达式有多方面的用途,如执行计算、提供查询记录条件等。

4.5.8 Transact-SQL表达式的分类

根据连接表达式的运算符进行分类,可以将表达式分为算术表达式、比较表达式、逻辑表达式、按位表达式和混合表达式等;根据表达式的作用进行分类,可以将表达式分为字段名表达式、目标表达式和条件表达式。

1.字段名表达式

字段名表达式可以是单一的字段名或几个字段的组合,还可以是由字段、作用于字段的集合函数和常量的任意算术运算(+、-、*、/)组成的运算表达式。主要包括数值表达式、字符表达式、逻辑表达式和日期表达式4种。

2.目标表达式

目标表达式有4种构成方式。

(1)*:表示选择相应基表和视图的所有字段。

(2)<表名>.*:表示选择指定的基表和视图的所有字段。

(3)集函数():表示在相应的表中按集函数操作和运算。

(4)[<表名>.]字段名表达式[,[<表名>.]<字段名表达式>]……:表示按字段名表达式在多个指定的表中选择。

3.条件表达式

常用的条件表达式有以下6种。

(1)比较大小:应用比较运算符构成表达式,主要的比较运算符有“=”“>”“>=”“<”“<=”“!=”“<>”“!>”(不大于)“!<”(不小于)NOT(与比较运算符相同,对条件求非)。

(2)指定范围:(NOT)BETWEEN…AND…运算符查找字段值在或者不在指定范围内的记录。BETWEEN后面指定范围的最小值,AND后面指定范围的最大值。

(3)集合(NOT)IN:查询字段值属于或者不属于指定集合内的记录。

(4)字符匹配:(NOT)LIKE ‘<匹配字符串>’[ESCAPE ‘<换码字符>’]查找字段值满足或不满足<匹配字符串>中指定的匹配条件的记录。<匹配字符串>可以是一个完整的字符串,也可以包含通配符“_”和“%”,“_”代表任意单个字符,“%”代表任意长度的字符串。

(5)空值IS(NOT)NULL:查找字段值为空(不为空)的记录。NULL不能用来表示无形值、默认值、不可用值、以及取最低值或取最高值。SQL规定,在含有运算符“+”“-”“*”“/”的算术表达式中,若有一个值是空值,则该算术表达式的值也是空值;任何一个含有NULL比较操作结果的取值都为FALSE。

(6)多重条件AND和OR:AND表达式用来查找字段值同时满足AND相连接的查询条件的记录。OR表达式用来查询字段值满足OR连接的查询条件中任意一个的记录。AND运算符的优先级高于OR运算符。