如果是,返回值为1,否则的话返回值为0。
mysql> select 9 in (1,4,9,10,'yunweijia'), 'yunweijia' in (1,4,9,10,'yunweijia'), 1 in (2,4,5); +-----------------------------+---------------------------------------+--------------+ | 9 in (1,4,9,10,'yunweijia') | 'yunweijia' in (1,4,9,10,'yunweijia') | 1 in (2,4,5) | +-----------------------------+---------------------------------------+--------------+ | 1 | 1 | 0 | +-----------------------------+---------------------------------------+--------------+ 1 row in set, 1 warning (0.00 sec) mysql>
not in
运算符用来判断表达式是否为in
列表中的其中一个值;
如果不是,返回值为1,否则的话返回值为0。
mysql> select 9 not in (1,4,9,10,'yunweijia'), 'yunweijia' not in (1,4,9,10,'yunweijia'), 1 not in (2,4,5); +---------------------------------+-------------------------------------------+------------------+ | 9 not in (1,4,9,10,'yunweijia') | 'yunweijia' not in (1,4,9,10,'yunweijia') | 1 not in (2,4,5) | +---------------------------------+-------------------------------------------+------------------+ | 0 | 0 | 1 | +---------------------------------+-------------------------------------------+------------------+ 1 row in set, 1 warning (0.00 sec) mysql>
当in
里面存在null
值,如果运算符不成立的话,直接返回null
;
mysql> select 9 in (1,4,9,10, null), 'yunweijia' in (1,4,9,10,'yunweijia', null), 1 in (2,4,5, null); +-----------------------+---------------------------------------------+--------------------+ | 9 in (1,4,9,10, null) | 'yunweijia' in (1,4,9,10,'yunweijia', null) | 1 in (2,4,5, null) | +-----------------------+---------------------------------------------+--------------------+ | 1 | 1 | NULL | +-----------------------+---------------------------------------------+--------------------+ 1 row in set, 1 warning (0.00 sec) mysql>
like运算法
用来匹配字符串;语法格式:
expr like 匹配条件
如果expr
满足匹配条件,则返回值为1,否则返回值为0。
当expr
或匹配条件中任何一个为null
,则结果为null
。
like
运算符在进行匹配的时候,可以使用通配符,如下:
%
匹配任何数目的字符,甚至包括零字符;_
只能匹配一个字符;
mysql> select 'yunweijia' like 'yunweijia', 'ywj' like 'yw_', 'ywj' like 'y%', 'ywj' like 'yunweijia'; +------------------------------+------------------+-----------------+------------------------+ | 'yunweijia' like 'yunweijia' | 'ywj' like 'yw_' | 'ywj' like 'y%' | 'ywj' like 'yunweijia' | +------------------------------+------------------+-----------------+------------------------+ | 1 | 1 | 1 | 0 | +------------------------------+------------------+-----------------+------------------------+ 1 row in set (0.00 sec) mysql>
REGEXP运算符
mysql
中的正则表达式,用来匹配字符串,语法格式为:
expr regexp 匹配条件
如果expr
满足匹配条件,返回1,否则返回0,如果expr
或匹配条件任意一个为NULL
,则结果为NULL
。
regexp
运算符在进行匹配时,常用的有以下几种通配符:
^
匹配以该字符后面的字符开头的字符串$
匹配以该字符前面的字符结尾的字符串.
匹配任意一个单字符[...]
匹配在方括号内的任何字符,例如:[abc]匹配'a','b','c'。常用的还有[a-z]匹配任何字母,而[0-9]匹配任何数字*
匹配另个或者多个在他前面的字符,例如:'x*'匹配任何数量的'x'字符,[0-9]*匹配任何数字,*匹配任何数量的任何字符。
mysql> select 'yunweijia' regexp '^y', 'ywj' regexp 'j$', 'ywj' regexp 'y*j', 'ywj' regexp "['ywj', 'aa', 'bb']"; +-------------------------+-------------------+--------------------+------------------------------------+ | 'yunweijia' regexp '^y' | 'ywj' regexp 'j$' | 'ywj' regexp 'y*j' | 'ywj' regexp "['ywj', 'aa', 'bb']" | +-------------------------+-------------------+--------------------+------------------------------------+ | 1 | 1 | 1 | 1 | +-------------------------+-------------------+--------------------+------------------------------------+ 1 row in set (0.00 sec) mysql>
逻辑运算符
在mysql
中所有逻辑运算符的求值所得结果均为TRUE
、FALSE
或NULL
。
在mysql
中,他们提现为1(TRUE
)、0(FALSE
)和NULL
。
NOT或!
逻辑非运算符not
或者!
,表示当操作数为0时,所得值为1;
当操作数为非零值时,所得值为0;
当操作数为null
时,所得的返回值为null
。
mysql> select not 10, not (1-1), not -5, not null, not 1+1; +--------+-----------+--------+----------+---------+ | not 10 | not (1-1) | not -5 | not null | not 1+1 | +--------+-----------+--------+----------+---------+ | 0 | 1 | 0 | NULL | 0 | +--------+-----------+--------+----------+---------+ 1 row in set (0.00 sec) mysql>
小提示:
在使用运算符计算时,一定要注意不同运算符的优先级不同。如果不能确定计算顺序,最好使用括号,以保证运算结果的正确。
ADD或者&&
逻辑与运算符add
或者&&
表示当所有操作数均为非零值,并且不为null
时,计算所得结果为1,;
当一个或多个操作数为0时,所得结果为0;
其余情况返回值为null
。
mysql> select 9 and -9, 1 and 0, 1 and null, 0 and null; +----------+---------+------------+------------+ | 9 and -9 | 1 and 0 | 1 and null | 0 and null | +----------+---------+------------+------------+ | 1 | 0 | NULL | 0 | +----------+---------+------------+------------+ 1 row in set (0.01 sec) mysql> select 9 && -9, 1 && 0, 1 && null, 0 && null; +---------+--------+-----------+-----------+ | 9 && -9 | 1 && 0 | 1 && null | 0 && null | +---------+--------+-----------+-----------+ | 1 | 0 | NULL | 0 | +---------+--------+-----------+-----------+ 1 row in set, 4 warnings (0.00 sec) mysql>
or或者||
逻辑或运算符or
或者||
表示当两个操作数均为非null
值且任意一个操作数为非零值时,结果为1,否则结果为0;
当有一个操作数为null
,且另一个操作数为非零值时,则结果为1,否则结果为null
;
当两个操作数均为null
时,则所得结果为null
。
mysql> select 9 or -9 or 0, 1 or 2, 0 or 0, 1 or null, 0 or null, null or null; +--------------+--------+--------+-----------+-----------+--------------+ | 9 or -9 or 0 | 1 or 2 | 0 or 0 | 1 or null | 0 or null | null or null | +--------------+--------+--------+-----------+-----------+--------------+ | 1 | 1 | 0 | 1 | NULL | NULL | +--------------+--------+--------+-----------+-----------+--------------+ 1 row in set (0.00 sec) mysql> select 9 || -9 || 0, 1 || 2, 0 || 0, 1 || null, 0 || null, null || null; +--------------+--------+--------+-----------+-----------+--------------+ | 9 || -9 || 0 | 1 || 2 | 0 || 0 | 1 || null | 0 || null | null || null | +--------------+--------+--------+-----------+-----------+--------------+ | 1 | 1 | 0 | 1 | NULL | NULL | +--------------+--------+--------+-----------+-----------+--------------+ 1 row in set, 7 warnings (0.00 sec) mysql>
XOR
逻辑异或运算符xor
表示当任意一个操作数为null
时,返回值为null
;
对于非null
的操作数,如果两个操作数都是非0值或者都是0值,则返回结果为0;
如果一个为0值,另一个为非0值,返回结果为1。
mysql> select 1 xor 1, 0 xor 0, 1 xor 0, 1 xor null, null xor null, 1 xor 1 xor 1; +---------+---------+---------+------------+---------------+---------------+ | 1 xor 1 | 0 xor 0 | 1 xor 0 | 1 xor null | null xor null | 1 xor 1 xor 1 | +---------+---------+---------+------------+---------------+---------------+ | 0 | 0 | 1 | NULL | NULL | 1 | +---------+---------+---------+------------+---------------+---------------+ 1 row in set (0.00 sec) mysql>
位运算符
位运算符是在二进制数上进行计算的运算符。位运算符会先将操作数变成二进制数,然后进行位运算,最后将计算结果从二进制变回十进制数。
位或运算符(||)
位或运算的实质是将参与运算的几个数据按照对应的二进制数作为进行逻辑或运算。对应的二进制位有一个或两个为1则该位的运算结果为1,否则为0。
mysql> select 10 | 15, 9 | 4 | 2; +---------+-----------+ | 10 | 15 | 9 | 4 | 2 | +---------+-----------+ | 15 | 15 | +---------+-----------+ 1 row in set (0.01 sec) mysql>
10的二进制数值为1010
,15的二进制数值为1111
,按位或运算之后,结果为1111
,即整数15;
9的二进制数值为1001
,4的二进制数值为0100
,2的二进制数值为0010
,按位或运算之后,结果为1111
,即整数15。
位与运算符(&)
位与运算的实质是将参与运算的几个操作数按照对应的二进制数逐位进行逻辑与运算。对应的二进制位都是1或1则该位的运算结果为1,否则为0。
mysql> select 10 & 15, 9 & 4 & 2; +---------+-----------+ | 10 & 15 | 9 & 4 & 2 | +---------+-----------+ | 10 | 0 | +---------+-----------+ 1 row in set (0.00 sec) mysql>
10的二进制数值为1010
,15的二进制数值为1111
,按位与运算之后,结果为1010
,即整数10;
9的二进制数值为1001
,4的二进制数值为0100
,2的二进制数值为0010
,按位与运算之后,结果为0000
,即整数0。
位异或运算符(^)
位异或运算的实质是将参与运算的两个数据按照对应的二进制数逐位进行逻辑异或运算。
对应位的二进制数不同时,对应位的结果才为1。如果两个对应位数都为0或者都为1,则对应位的结果为0。
mysql> select 10 ^ 5, 1 ^ 2, 3 ^ 6; +--------+-------+-------+ | 10 ^ 5 | 1 ^ 2 | 3 ^ 6 | +--------+-------+-------+ | 15 | 3 | 5 | +--------+-------+-------+ 1 row in set (0.00 sec) mysql>
10的二进制数值为1010
,5的二进制数值为101
,按位异或运算之后,结果为1111
,即整数15;
1的二进制数值为1
,2的二进制数值为10
,按位异或运算之后,结果为11
,即整数为3;
3的二进制数值为11
,6的二进制数值为110
,按位异或运算之后,结果为101
,即整数5。
位左移运算符(<<)
位左移运算符<<
使指定的二进制值的所有位都左移指定的位数。
左移指定位数之后,左边高位的数值继续左移,并不会进行丢弃,右边低位空出的位置用0补齐。
语法格式:
expr << n
n
指定值expr
要移位的位数。
mysql> select 1 << 2, 15 << 6; +--------+---------+ | 1 << 2 | 15 << 6 | +--------+---------+ | 4 | 960 | +--------+---------+ 1 row in set (0.00 sec) mysql>
1的二进制值为1
,左移两位之后变成了100
,即十进制证书4
;
15的二进制位1111
,左移6位之后变成了1111000000
,即十进制整数960。
位右移运算符(>>)
位右移运算符>>
使指定的二进制值的所有位都右移指定的位数。
右移指定位数之后,右边低位的数值将被移出并丢弃,左边高位空出的位置用0补齐。
语法格式为:
expr >> n
n
指定值expr
要移位的位数。
mysql> select 200 >> 2, 10 >> 6; +----------+---------+ | 200 >> 2 | 10 >> 6 | +----------+---------+ | 50 | 0 | +----------+---------+ 1 row in set (0.00 sec) mysql>
100的二进制为11001000
,右移两位之后是110010
,即十进制50;
10的二进制为1010
,右移6位之后是0
,即二进制也是0。
位取反运算符(~)
位取反运算的实质是将参与运算的数据按照对应的二进制数逐位反转,即1取反后变为0、0取反后变为1。
mysql> select 100 & ~1; +----------+ | 100 & ~1 | +----------+ | 100 | +----------+ 1 row in set (0.00 sec) mysql>
在逻辑运算100 & ~1
中,由于位取反运算符~
的级别高于位与运算符,因此先对1进行取反操作,取反之后,除了最低位为0外,其他位都是1,即1110
,然后与十进制数值100进行与运算,结果为1100100
,即整数100。
运算符的优先级
运算符的优先级决定了不同的运算符在表达式中计算的先后顺序。我们上面整理了这么多运算符,到底哪些运算符的优先级最高呢,下面我们就将优先级由低到高排列。
每个运算符的优先级都是不同的,一般情况下,级别高的运算符先进行计算,如果级别相同,mysql
按表达式的顺序从左到右依次计算。如果无法确定优先级,我们可以使用圆括号()来改变优先级。而且这样子会使我们的sql
更加优雅,且计算过程更加清晰。
到此这篇关于mysql中的四大运算符种类汇总(20多项) 的文章就介绍到这了,更多相关mysql运算符内容请搜索
更多相关Mysql内容来自木庄网络博客
标签:Mysql
相关阅读 >>
更多相关阅读请进入《mysql》频道 >>
数据库系统概念 第6版
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。