4.3 常见运算符介绍
运算符连接表达式中各个操作数,其作用是用来指明对操作数所进行的运算。常见的运算有数学计算、比较运算、位运算以及逻辑运算。运用运算符可以更加灵活地使用表中的数据,常见的运算符类型有:算术运算符,比较运算符,逻辑运算符,位运算符。本章将介绍各种操作符的特点和使用方法。
4.3.1 运算符概述
运算符是告诉Oracle执行特定算术或逻辑操作的符号。Oracle的内部运算符很丰富,主要有四大类,分别是:算术运算符、比较运算符、逻辑运算符、位操作运算符。
1.算术运算符
用于各类数值运算,包括加(+)、减(-)、乘(*)、除(/)。
2.比较运算符
用于比较运算,包括大于(>)、小于(<)、等于(=)、大于等于(>=)、小于等于(<=)、不等于(!=),以及IN、BETWEEN AND、IS NULL、LIKE等。
3.逻辑运算符
逻辑运算符的求值所得结果均为1(TRUE)、0(FALSE),这类运算符有逻辑非(NOT或者!)、逻辑与(AND或者&&)、逻辑或(OR或者||)、逻辑异或(XOR)。
4.位操作运算符
参与运算的操作数,按二进制位进行运算,包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)6种。
接下来将对Oracle中各种运算符的使用进行详细地介绍。
4.3.2 算术运算符
算术运算符是SQL中最基本的运算符,Oracle中的算术运算符如表4-3所示。
表4-3 Oracle中的算术运算符
下面分别讨论不同算术运算符的使用方法。
【例4.9】创建表tmp7,定义数据类型为NUMBER的字段num,插入值64,对num值进行算术运算。
首先创建表tmp7,输入语句如下:
向字段num插入数据64:
接下来,对num值进行加法和减法运算:
由计算结果可以看到,可以对num字段的值进行加法和减法运算,而且由于“+”和“–”的优先级相同,因此先加后减,或者先减后加之后的结果是相同的。
【例4.10】对tmp7表中的num进行乘法、除法运算。
由计算结果可以看到,对num进行除法运算时候,由于64无法被3整除,因此Oracle对num/3求商的结果保存到了小数点后面8位,结果为21.33333333。
在数学运算时,除数为0的除法是没有意义的,因此除法运算中的除数不能为0,如果被0除,则返回错误提示信息。
【例4.11】用0除num。
4.3.3 比较运算符
比较运算符经常在SELECT的查询条件子句中使用,用来查询满足指定条件的记录。Oracle中比较运算符如表4-4所示。
表4-4 Oracle中的比较运算符
下面分别讨论不同比较运算符的含义。
1.等于运算符=
等号“=”用来判断数字、字符串和表达式是否相等。
2.不等于运算符!=
“!=”用于判断数字、字符串、表达式不相等的判断。
3.小于或等于运算符<=
“<=”用来判断左边的操作数是否小于或者等于右边的操作数。
4.小于运算符<
“<”运算符用来判断左边的操作数是否小于右边的操作数。
5.大于或等于运算符>=
“>=”运算符用来判断左边的操作数是否大于或者等于右边的操作数。
6.大于运算符>
“>”运算符用来判断左边的操作数是否大于右边的操作数。
7.BETWEEN…AND运算符
BETWEEN…AND运算符用于测试是否在指定的范围内。通常和WHERE子句一起使用,BETWEEN…AND条件返回一个介于指定上限和下限之间的范围值。
例如下面的例子,选出出生在1980年~1990年的学生姓名:
上述语句包含上限值和下限值,和下面的语句效果一样。
8.IN运算符
IN运算符用来判断操作数是否为IN列表中的其中一个值。同样NOT IN运算符用来判断操作数是否不是IN列表中的其中一个值。
例如选出年龄是25和26的学生。
9.LIKE
在一个班级中,也许老师只知道某个学生的姓氏,并不知道全部名字。此时就可以使用LIKE进行查询。LIKE运算符用来匹配字符串。
LIKE运算符在进行匹配时,可以使用下面两种通配符:
(1)“%”:用来代表有零个或者多个字符组成的任意顺序的字符串。
(2)“_”:只能匹配一个字符。
例如选出姓张的所有的学生。
4.3.4 逻辑运算符
Oracle中的逻辑运算符如表4-5所示。
表4-5 Oracle中的逻辑运算符
这3个运算符的作用如下。
(1)NOT运算符:又称取反运算符,NOT通常是单目运算符,即NOT右侧才能包含表达式,是对结果取反。如果表达式结果为True,那么NOT的结果就为False;否则如果表达式的结果为False,那么NOT的结果就为True。
NOT运算符后面常常和IN、LIKE、BETWEEN-AND和NULL等关键字一起使用。
例如选择学生年龄不是25或者26的学生姓名。
(2)AND运算符:对于AND运算符来说,要求两边的表达式结果都为True,因此通常称为全运算符,如果任何一方的返回结果为NULL或False,那么逻辑运算的结果就为False,也就是说记录不匹配WHERE子句的要求。
例如选择学生年龄是25而且是姓张的学生姓名。
(3)OR运算符:OR运算符又称或运算符,也就是说只要左右两侧的布尔表达式任何一方为True,结果就为True。
例如选择学生年龄是25或者姓张的学生姓名。
这样无论年龄为25的学生还是姓张的学生,都会被选择出来。
4.3.5 运算符的优先级
运算符的优先级决定了不同的运算符在表达式中计算的先后顺序,表4-6列出了Oracle中的各类运算符及其优先级。
表4-6 运算符按优先级由低到高排列
可以看到,不同运算符的优先级是不同的。一般情况下,级别高的运算符先进行计算,如果级别相同,Oracle按表达式的顺序从左到右依次计算。当然,在无法确定优先级的情况下,可以使用圆括号“()”来改变优先级,并且这样会使计算过程更加清晰。