2019独角兽企业重金招聘Python工程师标准>>>
一、<=> (安全等于运算符)
mysql中的 =、<>或!=运算符,相信大家已经很清楚了。今天看到了<=>这个运算符,记录下来。
1><=>和=号的相同点
他们都是两个值比较符,相等时为1,不相等时为0;举例子:'A'<=>'B'得到的值是0,'c'<=>'c'得到的值是1。
2>和=号的不同点
null值在=号中是没有任何意义的。因此,=号运算符不能将null作为有效结果;当与null进行比较时,请用<null>。
举例子:
'A' <=> null 得到的结果为0,因为'A'和null明显是不相等的。
null <=> null 得到的结果为1。
但是,用 = 符号时,却得出如下结果
'A' = null 得到的结果是 null,因为null不能参与=的运算,只要是参与了,结果都是null
null = null 得到的结果也是null,理由如上,null不能参与=的运算。
实际例子
首先,查找全部的数据
很明显发现email这个字段只有一个有值,其余都为null。
接着,查出email为null的数据,用<=>查出的结果如下
查出的结果中,user_id最小值为100000038,说明,上一次查询全部的时候,我只截取了一部分图,对比上图可以发现,只有当email值设为null时,才能被email <=> null查出来,user_id为xx01、xx02……xx31等没有被查询出来。
最后,我们来看下使用 =符查询的结果
查出来的结果全部为null。我们的本意是查询email为null的数据,用<=>null可以查询出来,用=null什么都查询不出来。
备注
1. =的结果
SELECT * FROM t_user WHERE t_user.EMAIL = NULL
如上sql语句相当于如下sql语句,查询出来的结果都是一样的
SELECT * FROM t_user WHERE NULL
2.<=>与is
SELECT * FROM t_user WHERE t_user.EMAIL <=> NULL
如上sql语句相当于如下sql语句,查询出来的结果都是一样的
SELECT * FROM t_user WHERE t_user.EMAIL IS NULL
二、least运算符与greatest运算符
语法格式为:least(值1,值2,值3,……值n),其结果为值中最小的那个。如果任一值为null,则整体结果为null。
直接上例子,不解释,大家都懂的。
三、regexp运算符
该运算符用来匹配字符串,语法格式如下
select 源字符串 regexp 匹配条件,如果源字符串满足匹配条件,则返回1,;否则返回0。
注意:若 源字符串 或匹配条件 任意一个为null,则结果为null。
常用的通配符如下:
(1) '^' 匹配以该标识符后面字符开头的字符串,例如:'^s',表示匹配以s字符开头的字符串。
(2) '$' 匹配以该标识符前面字符结尾的字符串,例如:'y$',表示匹配以y字符结尾的字符串。
(3) '[...]' 匹配在方括号内的任意字符。例如:'[abc]'表示匹配a或b或c。字符的范围可以使用一个'-','[a-z]'匹配任何字母,'[0-9]'匹配任何数字。
(4) '.' 匹配任何一个单字符
(5) '*' 匹配0个或多个字符,注意:只能这样组合'X*',不能'*X'。
(6) '.*' 匹配任何数量任何字符
注意:这个点涉及到正则表达式,关于正则表达式,可以看我的另一篇关于正则表达式的文章。
举例子
(1) '^' 匹配以该标识符后面字符开头的字符串
如上例子源字符串是'xi',根据匹配的条件不同,得出不同的结果。
1.匹配以'h'开头的字符串,很明显'xi'不是以'h'开头,则返回0
2.匹配以'x'开头的字符串,返回1
3.匹配以'xi'开头的字符串,返回1
4.匹配以'xig'开头的字符串,很明显'xi'只有两位,不满足'xig'开头,返回0。
(2) '$' 匹配以该标识符前面字符结尾的字符串,例如:'y$',表示匹配以y字符结尾的字符串。
这个例子不解释,大伙都应该看得懂。
(3) '[...]' 匹配在方括号内的任意字符。
如上例子源字符串是'abcdefg',
1>匹配字符串'[abc]',只要源字符串中有a或b或c字符串,则都返回1。
2>匹配字符串为'[jkm]',由于源字符串中没有j或k或m,所以返回0。
(4) '.' 匹配任何一个单字符
如上例子,源字符串'zhangsan'
1>匹配字符串总共三位,要以'zh'结尾,很明显'zhangsan'不满足条件,则返回0.
2>匹配字符串总共三位,要以'gs'结尾,返回1
3>匹配字符串总共三位,要以'sn'结尾,由于源字符串根本就没有'Xsn'组合的字符串,所以没有匹配上,返回0。
(5) '*' 匹配0个或多个字符
如上例子中,源字符串是'lixianli'
1>匹配字符串为'lixian',很明显匹配得上
2>匹配字符串为'lian',源字符串中都没有这个字符,因此返回0
3>匹配字符串为'nli',刚好处于源字符串结尾,满足匹配0的条件,所以返回1。
(6) '.*' 匹配任何数量任何字符
这个就不用举例子了,随便匹配都可以。
四、逻辑运算符
AND或者&&、OR或者||、
异或运算符:XOR
位运算符
| 按位或
& 按位与
^ 按位异或
<< 按位左移
>> 按位右移
~ 按位取反
小贴士:可以使用BIN()函数查看一个十进制的二进制
自此,位运算介绍结束。