算术运算符 运算符 作用 + 加法 - 减法 * 乘法 /,DIV 除法,返回商(div 只保留整数) %,MOD 除法,返回余数
1 2 3 4 5 6 7 select 0.1 + 0.3333 ,0.1 -0.3333 ,0.1 * 0.3333 ,1 / 2 ,1 / 0 ,1 % 2 ,1 div 2 ,1 mod 2 ;+ | 0.1 + 0.3333 | 0.1 -0.3333 | 0.1 * 0.3333 | 1 / 2 | 1 / 0 | 1 % 2 | 1 div 2 | 1 mod 2 | + | 0.4333 | -0.2333 | 0.03333 | 0.5000 | NULL | 1 | 0 | 1 | + 1 row in set , 1 warning (0.00 sec)
比较运算符 当时用 select 语句进行查询时,MySQL 允许用户对表达式的左边操作数和右边操作数进行比较,比较结果为真,则返回 1,为假则返回 0,结果不确定则会返回 NULL。
比较运算符可以用于比较数字、字符串和表达式。数字作为浮点数进行比较,而字符串可以不区分大小写的方式进行比较。
运算符 作用 = 等于 <>或!= 不等于 <=> NULL 安全的等于(NULL-safe) < 小于 <= 小于等于 > 大于 >= 大于等于 BETWEEN 存在于指定范围 IN 存在于指定集合 IS NULL 为 NULL IS NOT NULL 非 NULL LIKE 通配符匹配 REGEXP 或 RLIKE 正则表达式匹配
= =
运算符用于比较运算符两侧的操作数是否相等,如果两侧操作数相等返回 1,否则返回 0.NULL 不能用=
比较。
1 2 3 4 5 6 7 select 1 = 1 ,1 = 0 ,NULL = NULL ;+ | 1 = 1 | 1 = 0 | NULL = NULL | + | 1 | 0 | NULL | + 1 row in set (0.01 sec)
<> / != <>
/!=
运算符和=
相反,如果两侧操作数不等,则值为 1,否则为 0,NULL 也不能用<>来比较。
1 2 3 4 5 6 7 select 1 != 1 ,1 <> 0 ,NULL <> NULL ;+ | 1 != 1 | 1 <> 0 | NULL <> NULL | + | 0 | 1 | NULL | + 1 row in set (0.00 sec)
<=> <=>
运算符和=
类似,在操作数相等时值为 1,不同之处在于及时操作数的值为 NULL 也可以正确的比较。
1 2 3 4 5 6 7 select 1 <=> 1 ,1 <=> 0 ,NULL <=> NULL ;+ | 1 <=> 1 | 1 <=> 0 | NULL <=> NULL | + | 1 | 0 | 1 | + 1 row in set (0.00 sec)
< <
运算符,当左侧操作数小于右侧操作数时,其返回值为 1,否则值为 0.
1 2 3 4 5 6 7 select 'a' < 'b' ,'a' < 'a' ,'1' < '2.2' ,null < 1 ,null > 1 ;+ | 'a' < 'b' | 'a' < 'a' | '1' < '2.2' | null < 1 | null > 1 | + | 1 | 0 | 1 | NULL | NULL | + 1 row in set (0.00 sec)
<= <=
运算符,当左侧操作数小于等于右侧操作数时,其返回值为 1,否则值为 0.
1 2 3 4 5 6 7 select 'a' <= 'b' ,'a' <= 'a' ,'1' <= '2.2' ,null <= 1 ,null >= 1 ;+ | 'a' <= 'b' | 'a' <= 'a' | '1' <= '2.2' | null <= 1 | null >= 1 | + | 1 | 1 | 1 | NULL | NULL | + 1 row in set (0.00 sec)
> >
运算符,当左侧操作数大于右侧操作数时,其返回值为 1,否则值为 0.
1 2 3 4 5 6 7 select 'a' > 'b' ,'a' > 'a' ,'1' > '2.2' ,null > 1 ,null >= 1 ;+ | 'a' > 'b' | 'a' > 'a' | '1' > '2.2' | null > 1 | null >= 1 | + | 0 | 0 | 0 | NULL | NULL | + 1 row in set (0.00 sec)
>= >=
运算符,当左侧操作数大于等于右侧操作数时,其返回值为 1,否则值为 0.
1 2 3 4 5 6 7 select 'a' >= 'b' ,'a' >= 'a' ,'1' >= '2.2' ,null >= 1 ,null >= 1 ;+ | 'a' >= 'b' | 'a' >= 'a' | '1' >= '2.2' | null >= 1 | null >= 1 | + | 0 | 1 | 0 | NULL | NULL | + 1 row in set (0.00 sec)
BETWEEN BETWEEN
运算符的使用格式为a BETWEEN min AND max
,当 a 大于等于 min 且小于等于 max 时返回 1,否则返回 0;当操作数 a、min、max 类型相同时,此表达式等价于(a>=min and a<=max),当操作数类型不同时,比较会遵循类型转换原则进行转换后,在进行比较运算。
1 2 3 4 5 6 7 select 12 between 10 and 15 ;+ | 12 between 10 and 15 | + | 1 | + 1 row in set (0.00 sec)
IN IN
运算符的使用格式为 a IN (value1,value2,…),当 a 的值存在于列表中时,则返回值为 1,否则为 0。
1 2 3 4 5 6 7 select 1 in (1 ,2 ),'q' in ('M' ,'Y' ,'S' ,'Q' ,'L' );+ | 1 in (1 ,2 ) | 'q' in ('M' ,'Y' ,'S' ,'Q' ,'L' ) | + | 1 | 1 | + 1 row in set (0.00 sec)
IS NULL IS NULL
运算符的使用格式为a IS NULL
,当 a 的值为 NULL,则返回值为 1,否则返回 0。
1 2 3 4 5 6 7 select 0 is null ,null is null ;+ | 0 is null | null is null | + | 0 | 1 | + 1 row in set (0.00 sec)
IS NOT NULL IS NOT NULL
运算符的使用格式为a IS NOT NULL
,当 a 的值不为 NULL,则返回值为 1,否则返回 0
1 2 3 4 5 6 7 select 0 is not null ,null is not null ;+ | 0 is not null | null is not null | + | 1 | 0 | + 1 row in set (0.00 sec)
like like
运算符的使用格式为a LIKE %123%
,当 a 中包含字符串”123”时,返回值为 1,否则为 0
1 2 3 4 5 6 7 select 123456 like '123%' , 123456 like '%123' ,123456 like '%312%' ;+ | 123456 like '123%' | 123456 like '%123' | 123456 like '%312%' | + | 1 | 0 | 0 | + 1 row in set (0.00 sec)
REGEXP REGEXP
运算符的使用格式为”str REGEXP str_pat”,当字符串中含有 str_pat 相匹配的字符串时,返回值为 1,否则返回 0
1 2 3 4 5 6 7 select 'abcdef' regexp 'ab' ,'abcdef' regexp 'k' ;+ | 'abcdef' regexp 'ab' | 'abcdef' regexp 'k' | + | 1 | 0 | + 1 row in set (0.00 sec)
逻辑运算符 逻辑运算符又称为布尔运算符,用来确认表达式的真假。MySQL 支持以下四种逻辑运算符:
运算符 作用 NOT/! 逻辑非 AND/& 逻辑与 OR/|| 逻辑或 XOR 逻辑异或
逻辑非 返回和操作数相反的结果。当操作数为 0,则返回值为 1,否则为 0.但是有一点除外,那就是 NOTNULL 的返回值为 NULL。
1 2 3 4 5 6 7 select not 0 ,not 1 ,not null ;+ | not 0 | not 1 | not null | + | 1 | 0 | NULL | + 1 row in set (0.00 sec)
逻辑与 当所有操作数均为非零值并且不为 NULL 时,计算所得结果为 1;当一个或多个操作数为 0 时,所得结果为 0;操作数中有任意一个为 NULL,返回值为 NULL
1 2 3 4 5 6 7 select 1 and 1 ,0 and 1 ,3 and 1 ,1 and null ;+ | 1 and 1 | 0 and 1 | 3 and 1 | 1 and null | + | 1 | 0 | 1 | NULL | + 1 row in set (0.00 sec)
逻辑或 当两个操作数均为非 NULL 值时,如有任意一个操作数做为非零值,则结果为 1,否则结果为 0;当有一个操作数为 NULL 时,如另一个操作数为非零值,则结果为 1,否则为 NULL,如果两个操作数均为 NULL,则所得结果为 NULL。
1 2 3 4 5 6 7 select 1 or 1 ,0 or 1 ,3 or 1 ,1 or null ,null or null ;+ | 1 or 1 | 0 or 1 | 3 or 1 | 1 or null | null or null | + | 1 | 1 | 1 | 1 | NULL | + 1 row in set (0.00 sec)
逻辑异或 当任意一个操作数为 NULL 时,返回值为 NULL;对于非 NULL 的操作数,如果两个的逻辑真价值相异,则返回 1,否则返回 0.
1 2 3 4 5 6 7 select 1 xor 1 ,0 xor 0 ,1 xor 0 ,0 xor 1 ,null xor 1 ;+ | 1 xor 1 | 0 xor 0 | 1 xor 0 | 0 xor 1 | null xor 1 | + | 0 | 0 | 1 | 1 | NULL | + 1 row in set (0.00 sec)
位运算符 位运算是将给定的操作数转化为二进制后,对各个操作数每一位都进行指定的逻辑运算,得到的二进制结果转化为十进制数就是位运算的结果。MySQL5.7 支持六种位运算符
运算符 作用 $ 位与 | 位或 ^ 位亦或 ~ 位取反 >> 位右移 << 位左移
位与 1 2 3 4 5 6 7 select 2 & 3 ;+ | 2 & 3 | + | 2 | + 1 row in set (0.00 sec)
位或 1 2 3 4 5 6 7 select 2 | 3 ;+ | 2 | 3 | + | 3 | + 1 row in set (0.00 sec)
位异或 1 2 3 4 5 6 7 select 2 ^ 3 ;+ | 2 ^ 3 | + | 1 | + 1 row in set (0.00 sec)
位取反 1 2 3 4 5 6 7 select ~ 1 ,~ 18446744073709551614 ;+ | ~ 1 | ~ 18446744073709551614 | + | 18446744073709551614 | 1 | + 1 row in set (0.00 sec)
在 MySQL 中常量数字默认会以 8 个字节来表示,8 个字节就是 64 位,常量 1 的二进制表示为 63 个 0 加一个 1,取反就是 63 个 1 加一个 0,转换成二进制就是 18446744073709551614
1 2 3 4 5 6 select bin(18446744073709551614 );+ | bin(18446744073709551614 ) | + | 1111111111111111111111111111111111111111111111111111111111111110 | +
位右移 100 的二进制 0001100100 右移 3 位,左边补零,结果是 0000001100,转换为二进制为 12.
1 2 3 4 5 6 7 select 100 >> 3 ;+ | 100 >> 3 | + | 12 | + 1 row in set (0.00 sec)
位左移 1 2 3 4 5 6 7 select 100 << 3 ;+ | 100 << 3 | + | 800 | + 1 row in set (0.00 sec)