4.1.1 MySQL的运算符
运算符是告诉MySQL执行特殊算术或逻辑操作的符号。MySQL的内部运算符很丰富,主要有四大类:算术运算符、比较运算符、逻辑运算符、位操作运算符。
1.算术运算符
用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)。
示例如下:
加:select 1+2;
减:select 2-1;
乘:select 2*3;
除:select 5/3;--/做除法,结果为小数
商:select 5 div 2;--div做除法,结果为整数
模:select 5%2,mod(5,2);
2.比较运算符
一个比较运算符的结果总是1(true)、0(false)或者是null。比较运算符经常在select的查询条件子句中使用,用来查询满足指定条件的记录。MySQL中比较运算符见表4-1。
表4-1 比较运算符介绍及示例
比较运算符可以用于比较数字和字符串。数字作为浮点值比较,而字符串以不区分大小写的方式进行比较(除非使用特殊的binary关键字)。另外,MySQL能够自动地把数字转换为字符串,而在比较运算过程中,MySQL能够自动地把字符串转换为数字。
下面简单介绍几种比较运算符的用法及示例:
1)“=”,等于运算符,用于比较表达式的两边是否相等,也可以对字符串进行比较,如:
注意,因为在默认情况下MySQL以不区分大小写的方式比较字符串,所以表达式‘A’=‘a’的结果为真。如果想执行区分大小写的比较,可以添加binary关键字,这意味着对字符串以二进制方式处理。当在字符串上执行比较运算时,MySQL将区分字符串的大小写。
示例如下:
等于运算符数值比较时,有如下规则:
①若有一个或两个参数为null,则比较运算的结果为null。
②若同一个比较运算符中的两个参数都是字符串,则按照字符串进行比较。
③若两个参数均为整数,则按照整数进行比较。
④若一个字符串和数字进行相等判断,则MySQL可以自动将字符串转换为数字。
2)<=>,安全的等于运算符,与“=”操作符执行相同的比较操作,不过<=>可以用来判断null值。在两个操作数均为null时,其返回值为1而不为null;而当一个操作数为null时,其返回值为0而不为null。示例如下:
3)<>(!=),不等于运算符,用于判断数字、字符串、表达式不相等的判断。如果不相等,返回值为1;否则返回值为0。这两个运算符不能用于判断空值null。示例如下:
4)<、<=、>、>=运算符,这些运算符不能用于空值判断。
5)like运算符,用来匹配字符串。语法格式为:expr like匹配条件,如果expr满足匹配条件,则返回值为1(true);如果不匹配,则返回值为0(false)。若expr或匹配条件中任何一个为null,则结果为null。
like运算符在进行匹配时,可以使用下面两种通配符:
①‘%’,匹配任何数目的字符,甚至包括0个字符。
②‘_’,只能匹配1个字符。
示例如下:
6)regexp运算符,用来匹配字符串,语法格式为:expr regexp匹配条件。如果expr满足匹配条件,返回1;如果不满足,则返回0;若expr或匹配条件任意一个为null,则结果为null。
regexp运算符在进行匹配时,常用的有下面几种通配符:
①‘^’,匹配以该字符后面的字符开头的字符串。
②‘$’,匹配以该字符后面的字符结尾的字符串。
③‘.’,匹配任何一个单字符。
④‘[…]’,匹配在方括号内的任何字符。
示例如下:
“[abc]”匹配‘a’‘b’或‘c’。为了命名字符串的范围,使用一个‘-’。“[az]”匹配任何字母,而“[0-9]”匹配任何数字。
⑤‘*’,匹配0个或多个在它前面的字符。
示例如下:
3.逻辑运算符
在SQL中,所有逻辑运算符的求值所得结果均为true、false或null。在MySQL中,它们体现为1(true)、0(false)和null。其大多数都与不同的数据库SQL通用,MySQL中的逻辑运算符见表4-2。
表4-2 逻辑运算符介绍及示例
(1)not或者!
逻辑非运算符not或者!表示当操作数为0时,所得值为1;当操作数为非零值时,所得值为0;当操作数为null时,所得的返回值为null。
(2)and或者&&
逻辑与运算符and或者&&表示当所有操作数均为非零值,并且不为null时,计算所得结果为1;当一个或多个操作数为0时,所得结果为0;其余情况返回值为null。
(3)or或者||
逻辑或运算符or或者||表示当两个操作数均为非null值,且任意一个操作数为非零值时,结果为1,否则结果为0;当有一个操作数为null,且另一个操作数为非零值时,则结果为1,否则结果为null;当两个操作数均为null时,则所得结果为null。
(4)xor或者^
逻辑异或运算符xor表示当任意一个操作数为null时,返回值为null;对于非null的操作数,如果两个操作数都是非0值或者都是0值,则返回结果为0;如果一个为0值,另一个为非0值,返回结果为1。
4.位操作运算符
参与运算的操作数按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)6种。MySQL中的位操作运算符见表4-3。
表4-3 位操作运算符介绍及示例
学习了MySQL中的运算符后,下面了解一下运算符的优先级。运算符的优先级决定了不同的运算符在表达式中计算的先后顺序,表4-4列出了MySQL中的各类运算符及其优先级。
表4-4 运算符按优先级由低到高排列
5.MySQL中运算符的优先级
可以看到,不同运算符的优先级是不同的,一般情况下,级别高的运算符先进行计算,如果级别相同,MySQL按表达式的顺序从左到右依次计算。当然,在无法确定优先级的情况下,可以使用圆括号“()”来改变优先级,并且这样会使计算过程更加清晰。
6.运算符实训
创建ceshi数据库,在该数据库下创建表temp,其中包含varchar类型的字段note和int类型的字段price,使用运算符对表temp中不同的字段进行运算。
首先创建ceshi数据库,使用ceshi数据库,在该数据库中创建表temp:
向temp表中插入两条记录,SQL语句如下:
实训:
①对temp表中的整型数据price进行算数运算,执行过程如下:
②对表temp中的整型数据price进行比较运算,执行过程如下:
③判断price的值是否落在30~80区间内;返回80,30相比最大的值,判断price是否为in列表(10,20,50,60)中的某个值,执行过程如下:
④将price字段值与null,0进行逻辑运算,执行过程如下: