1. 算术运算符
加法运算符:
mysql的+只表示数值相加,如果是非数值类型,会尝试转换成数值,转换失败就是0
除法运算符:
- 一个数除以整数后,不管是否能除尽,结果都为一个4位小数的浮点数
- 一个数除以0为NULL。Null是占用空间的
2. 比较运算符
比较的结果为真则返回1,比较的结果为假则返回0,其他情况则返回NULL
- =:等于运算符。如果等号两边的值都是字符串,则按字符串中的字符ANSI码进行比较。如果等号两边的值一个是整数,另一个是字符串,则会将字符串转化为数字进行比较。如果等号两边的值、字符串、表达式中有一个为NULL,则比较结果为NULL。SQL中赋值符号使用:=,例如
update table set name := 'name1' where id = 1;
- <=>:安全等于运算符。和等于运算符类似,区别在于两个操作数均为NULL时,其返回值为1,而不为NULL;当一个操作数为NULL时,其返回值为0,而不为NULL
- <>和!=:不等于运算符。不等于运算符不能判断NULL值。如果两边的值有任意一个为NULL,或两边都为NULL,则结果为NULL
- least:最小值运算符,在多个值中返回最小值。例如
select least(a, b, c);
。当参数是整数或浮点数时,least将返回其中最小的值;当参数为字符串时,返回字母表中顺序最靠前的字符;当比较值列表中有NULL时,不能判断大小,返回值为NULL - greatest:最大值运算符,在多个值中返回最大值。例如
select greatest(a, b, c);
- in:属于运算符。如果给定的值为NULL,则结果为NULL
- like:模糊匹配运算符。通配符_只能匹配一个字符。如果给定的值或者匹配条件为NULL,则返回结果为NULL
- regexp:正则表达式运算符,判断一个值是否符合正则表达式的规则。例如
select 'abc' regexp '^a';
,返回的结果为1。若expr或匹配条件任意一个为NULL,则结果为NULL - rlike:正则表达式运算符,判断一个值是否符合正则表达式的规则。例如
select a from table where b rlike c;
3. 逻辑运算符
逻辑运算符的返回结果为1、0或者NULL
- not:逻辑非运算符。当给定的值为0时返回1;当给定的值为非0值时返回0;当给定的值为NULL时,返回NULL。例如
select not (1 + 1);
返回的结果为0 - and:逻辑与运算符。当给定的所有值均为非0值,并且都不为NULL时,返回
1;当给定的一个值或者多个值为0时则返回0;否则返回NULL - or:逻辑或运算符。当给定的值有一个非0值时,则返回1;当两个值都是0值时,返回0;当一个值为0另一个值为NULL或者两个值都为NULL,则返回NULL
- xor:逻辑异或。当给定的值中任意一个值为NULL时,则返回NULL;如果
两个非NULL的值都是0或者都不等于0时,则返回0;如果一个值为0,另一个值不为0时,则返回1。例如select a xor b;
4. 位运算符
位运算符会先将操作数变成二进制数,然后进行位运算,最后将计算结果从二进制变回十进制数
- &:按位与运算符。将给定值对应的二进制数逐位进行逻辑与运算,当数值都为1时,则该位返回1,否则返回0。例如
select 1 and 10;
,1的二进制位0001,10的二进制位1010,结果为0000,十进制的结果为0 - |:按位或运算符
- ^:按位异或运算符。将给定的值对应的二进制数逐位进行逻辑异或运算。当数值不同时,则该位返回1,否则返回0。例如
select 1 ^ 10;
,二进制结果为1011,十进制的结果为11 - ~:按位取反运算符。将给定的值的二进制数逐位进行取反操作,即将1变为0,将0变为1。例如
select ~1;
,二进制结果为1110,十进制结果为14 - >>:按位右移运算符。将给定的值的二进制数的所有位右移指定的位数。右移指定的位数后,右边低位的数值被移出并丢弃,左边高位空出的位置用0补齐。例如
select 10 >> 2;
,右移2位的二进制结果为0010,十进制的结果为2 - <<:按位左移运算符。将给定的值的二进制数的所有位左移指定的位数。左移指定的位数后,左边高位的数值被移出并丢弃,右边低位空出的位置用0补齐。例如
select 10 << 2;
,左移2位的二进制结果为00101000,十进制结果为40