第四章 运算符
运算符是一种符号,用来指定要在一个或多个表达式中执行的操作。
==============================
一 算术运算符
==============================
算术运算符在两个表达式上执行数学运算,这两个表达式可以是数字数据类型分类的任何数据类型。
运算符 含义
+(加) 加法。
-(减) 减法。
*(乘) 乘法。
/(除) 除法。
%(模) 返回一个除法的整数余数。例如,12 % 5 = 2,这是因为 12 除以 5,余数为 2。
==============================
二 赋值运算符
==============================
Transact-SQL 有一个赋值运算符,即等号 (=)。赋值运算符配合SET为变量赋值,也可以使用赋值运算符在列标题和为列定义值的表达式之间建立关系。
示例1
在下面的示例中,创建了 @MyCounter 变量。然后,赋值运算符将 @MyCounter 设置成一个由表达式返回的值。
DECLARE @MyCounter INT
SET @MyCounter = 1
示例2
下面的示例显示名为 title 列标题。并在 title 列标题中为所有的行都显示字符串 xyz。
USE pubs
GO
SELECT title = 'xyz'
FROM titles
GO
==============================
三 比较运算符
==============================
比较运算符测试两个表达式是否相同。除了 text、ntext 或 image 数据类型的表达式外,比较运算符可以用于所有的表达式。
运算符 含义
=(等于) 等于
>(大于) 大于
<(小于) 小于
>=(大于或等于) 大于等于
<=(小于或等于) 小于等于
<>(不等于) 不等于
!=(不等于) 不等于
!< (不小于) 不小于
!> (不大于) 不大于
注意点:
1
比较运算符的结果有布尔数据类型,它有三种值:TRUE、FALSE 及 UNKNOWN。那些返回布尔数据类型的表达式被称为布尔表达式。
2
和其它 SQL Server 数据类型不同,不能将布尔数据类型指定为表列或变量的数据类型,也不能在结果集中返回布尔数据类型。
3
在 WHERE 子句中使用带有布尔数据类型的表达式,可以筛选出符合搜索条件的行,也可以在流控制语言语句(例如 IF 和 WHILE)中使用这种表达式。
示例3
USE pubs
GO
DECLARE @Mytd int
SET @Mytd = 15096
IF (@Mytd <> 0)
SELECT *
FROM titles
WHERE ytd_sales = @Mytd
GO
==============================
四 逻辑运算符
==============================
逻辑运算符对某个条件进行测试,以获得其真实情况。逻辑运算符和比较运算符一样,返回带有 TRUE 或 FALSE 值的布尔数据类型。
逻辑运算符:
ALL 如果一系列的比较都为 TRUE,那么就为 TRUE。
AND 如果两个布尔表达式都为 TRUE,那么就为 TRUE。
ANY 如果一系列的比较中任何一个为 TRUE,那么就为 TRUE。
BETWEEN 如果操作数在某个范围之内,那么就为 TRUE。
EXISTS 如果子查询包含一些行,那么就为 TRUE。
IN 如果操作数等于表达式列表中的一个,那么就为 TRUE。
LIKE 如果操作数与一种模式相匹配,那么就为 TRUE。
NOT 对任何其它布尔运算符的值取反。
OR 如果两个布尔表达式中的一个为 TRUE,那么就为 TRUE。
SOME 如果在一系列比较中,有些为 TRUE,那么就为 TRUE。
==============================
字符串串联运算符
==============================
字符串串联运算符允许通过加号 (+) 进行字符串串联,这个加号也被称为字符串串联运算符。其它所有的字符串操作都可以通过字符串函数(例如 SUBSTRING)进行处理。
默认情况下,对于 varchar 数据类型的数据,在 INSERT 或赋值语句中,将空的字符串解释为空字符串。在串联 varchar、char 或 text 数据类型的数据时,空的字符串被解释为空字符串。例如,将 'abc' + '' + 'def' 存储为 'abcdef'。
==============================
运算符的优先顺序
==============================
当一个复杂的表达式有多个运算符时,运算符优先性决定执行运算的先后次序。执行的顺序可能严重地影响所得到的值。
运算符有下面这些优先等级。在较低等级的运算符之前先对较高等级的运算符进行求值。
+(正)、-(负)、~(按位 NOT)
*(乘)、/(除)、%(模)
+(加)、(+ 串联)、-(减)
=, >, <, >=, <=, <>, !=, !>, !< 比较运算符
^(位异或)、&(位与)、|(位或)
NOT
AND
ALL、ANY、BETWEEN、IN、LIKE、OR、SOME
==============================
=(赋值)
==============================
当一个表达式中的两个运算符有相同的运算符优先等级时,基于它们在表达式中的位置来对其从左到右进行求值。
示例4
在下面的示例中,在 SET 语句中使用的表达式中,在加号运算符之前先对减号运算符进行求值。
DECLARE @MyNumber int
SET @MyNumber = 4 - 2 + 27
SELECT @MyNumber
示例5
例如在下面的示例中,在 SET 语句所使用的表达式中,乘运算符比加运算符有更高的优先权,所以先对乘运算符进行求值;表达式的结果是 13。
DECLARE @MyNumber int
SET @MyNumber = 2 * 4 + 5
SELECT @MyNumber
示例6
在下面的示例中,在 SET 语句使用的表达式中,括号使得首先执行加法;表达式结果是 18。
DECLARE @MyNumber int
SET @MyNumber = 2 * (4 + 5)
SELECT @MyNumber
示例7
如果表达式有嵌套的括号,那么首先对嵌套最深的表达式求值。
DECLARE @MyNumber int
SET @MyNumber = 2 * (4 + (5 - 3) )
SELECT @MyNumber
--12.