1、<=> (安全等于运算符)
mysql
mysql中的 =、<>或!=运算符,相信你们已经很清楚了。今天看到了<=>这个运算符,记录下来。正则表达式
1><=>和=号的相同点
sql
他们都是两个值比较符,相等时为1,不相等时为0;举例子:'A'<=>'B'获得的值是0,'c'<=>'c'获得的值是1。安全
2>和=号的不一样点函数
null值在=号中是没有任何意义的。所以,=号运算符不能将null做为有效结果;当与null进行比较时,请用<null>。code
举例子:
regexp
'A' <=> null 获得的结果为0,由于'A'和null明显是不相等的。字符串
null <=> null 获得的结果为1。ast
可是,用 = 符号时,却得出以下结果class
'A' = null 获得的结果是 null,由于null不能参与=的运算,只要是参与了,结果都是null
null = null 获得的结果也是null,理由如上,null不能参与=的运算。
实际例子
首先,查找所有的数据
很明显发现email这个字段只有一个有值,其他都为null。
接着,查出email为null的数据,用<=>查出的结果以下
查出的结果中,user_id最小值为100000038,说明,上一次查询所有的时候,我只截取了一部分图,对比上图能够发现,只有当email值设为null时,才能被email <=> null查出来,user_id为xx0一、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
2、least运算符与greatest运算符
语法格式为:least(值1,值2,值3,……值n),其结果为值中最小的那个。若是任一值为null,则总体结果为null。
直接上例子,不解释,你们都懂的。
3、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) '.*' 匹配任何数量任何字符
这个就不用举例子了,随便匹配均可以。
4、逻辑运算符
AND或者&&、OR或者||、
异或运算符:XOR
位运算符
| 按位或
& 按位与
^ 按位异或
<< 按位左移
>> 按位右移
~ 按位取反
小贴士:可使用BIN()函数查看一个十进制的二进制
自此,位运算介绍结束。