SQL --运算符

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()函数查看一个十进制的二进制


自此,位运算介绍结束。

相关文章
相关标签/搜索