SQL --运算符

一、<=> (安全等于运算符)

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不能参与=的运算。

实际例子

首先,查找全部的数据

094148_eswr_2312022.jpg

很明显发现email这个字段只有一个有值,其余都为null。

接着,查出email为null的数据,用<=>查出的结果如下

094427_8wBi_2312022.jpg

查出的结果中,user_id最小值为100000038,说明,上一次查询全部的时候,我只截取了一部分图,对比上图可以发现,只有当email值设为null时,才能被email <=> null查出来,user_id为xx01、xx02……xx31等没有被查询出来。

最后,我们来看下使用 =符查询的结果

094812_iGrU_2312022.jpg

查出来的结果全部为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。

直接上例子,不解释,大家都懂的。

100810_xSK8_2312022.jpg

100810_hHkU_2312022.jpg

三、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) '^' 匹配以该标识符后面字符开头的字符串105543_Z8Mt_2312022.jpg

如上例子源字符串是'xi',根据匹配的条件不同,得出不同的结果。

1.匹配以'h'开头的字符串,很明显'xi'不是以'h'开头,则返回0

2.匹配以'x'开头的字符串,返回1

3.匹配以'xi'开头的字符串,返回1

4.匹配以'xig'开头的字符串,很明显'xi'只有两位,不满足'xig'开头,返回0。

(2) '$' 匹配以该标识符前面字符结尾的字符串,例如:'y$',表示匹配以y字符结尾的字符串。

110409_euq3_2312022.jpg

这个例子不解释,大伙都应该看得懂。

(3) '[...]' 匹配在方括号内的任意字符。

111040_FMUb_2312022.jpg

如上例子源字符串是'abcdefg',

1>匹配字符串'[abc]',只要源字符串中有a或b或c字符串,则都返回1。

2>匹配字符串为'[jkm]',由于源字符串中没有j或k或m,所以返回0。

(4) '.' 匹配任何一个单字符

111949_LGNm_2312022.jpg

如上例子,源字符串'zhangsan'

1>匹配字符串总共三位,要以'zh'结尾,很明显'zhangsan'不满足条件,则返回0.

2>匹配字符串总共三位,要以'gs'结尾,返回1

3>匹配字符串总共三位,要以'sn'结尾,由于源字符串根本就没有'Xsn'组合的字符串,所以没有匹配上,返回0。

(5) '*' 匹配0个或多个字符

113435_y1c7_2312022.jpg

如上例子中,源字符串是'lixianli'

1>匹配字符串为'lixian',很明显匹配得上

2>匹配字符串为'lian',源字符串中都没有这个字符,因此返回0

3>匹配字符串为'nli',刚好处于源字符串结尾,满足匹配0的条件,所以返回1。

(6) '.*' 匹配任何数量任何字符

这个就不用举例子了,随便匹配都可以。

四、逻辑运算符

AND或者&&、OR或者||、

异或运算符:XOR

位运算符

|  按位或

& 按位与

^ 按位异或

<< 按位左移

>> 按位右移

~ 按位取反

小贴士:可以使用BIN()函数查看一个十进制的二进制

114802_YIT8_2312022.jpg


自此,位运算介绍结束。


转载于:https://my.oschina.net/u/2312022/blog/526858

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值