MySQL学习-运算符(二)

179 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情

前言

上篇我们学习完了算术运算符,有兴趣的小伙伴可以阅读(# MySQL学习-运算符(一))。
下面继续学习MySQL中的运算符

比较运算符

比较运算符用来对表达式两边的操作数进行比较,比较的结果为真则返回1,比较的结果为假则返回0,其他情况则返回NULL。 比较运算符经常被用来作为SELECT查询语句的条件来使用,返回符合条件的结果记录。

符号运算符

符号运算符有=、<=>、<>(!=)、<、<=、>、>=

运算符名称作用示例
=等于运算符判断两个值、字符串或者表达式是否相等SELECT C FROM TABLE WHERE A = B
<=>安全等于运算符安全的判断两个值、字符串或者表达式是否相等SELECT C FROM TABLE WHERE A <=> B
<>(!=)不等于运算符判断两个值、字符串或者表达式是否不相等SELECT C FROM TABLE WHERE A <> B 或者 SELECT C FROM TABLE WHERE A != B
<小于运算符判断前面的值、字符串或者表达式是否是否小于后面的值、字符串或者表达式SELECT C FROM TABLE WHERE A < B
<=小于等于运算符判断前面的值、字符串或者表达式是否是否小于等于后面的值、字符串或者表达式SELECT C FROM TABLE WHERE A <= B
大于运算符判断前面的值、字符串或者表达式是否是否大于后面的值、字符串或者表达式SELECT C FROM TABLE WHERE A > B
>=大于等于运算符判断前面的值、字符串或者表达式是否是否大于等于后面的值、字符串或者表达式SELECT C FROM TABLE WHERE A >= B

运算符示例一

SELECT 1 = 1, 1 != 1
FROM DUAL
1 = 11 != 1
10

可以看到1 = 1结果是1,也就是真。1 != 1结果是0,也就是假。

运算符示例二

SELECT 1 = '1', 1 = 'a', 0 = 'a'
FROM DUAL
1 = '1'1 = 'a'0 = 'a'
101

可以看到1 = '1'结果是1,这个字符串在上一节写过,运算的时候存在隐式转换,这里转换成数字1,所以结果是1。 1 = 'a' 结果是0,上一节也写过,转换数值不成功的情况下,都是0,所以1与0比较,结果是0。所以后面的运算0 = 'a'结果是1,0与0比较结果是相等的,为1。

运算符示例三

SELECT 'a' = 'a', 'a' = 'b'
FROM DUAL
'a' = 'a''a' = 'b'
10

可以看到'a' = 'b',结果是0。这里没有进行隐式转换成0进行比较,所以如果是单纯的字符串进行比较的话,不会进行隐式转换,会按照字符串进行比较,其比较的是每个字符串中字符的ANSI编码是否相等。

运算符示例四

SELECT 1 = NULL, NULL = NULL
FROM DUAL
1 = NULLNULL = NULL
NULLNULL

可以看到结果都是NULL,由此得出结论:只要有NULL参与判断,结果就为NULL。

运算符示例五

下面我们查找一下表中备注字段值为NULL的结果。

SELECT name, remark
FROM Test
WHERE remark = NULL
nameremark

可以看到没有结果,但是实际表中remark字段是有NULL值的,为什么没有查出结果。这是因为查询的时候条件是1的结果才会查出来,这里条件是remark = NULL,运算后的结果是NULL,而不是1,所有查不出结果。 那我们确实需要查出字段为NULL值的结果,怎么做呢?这里需要使用运算符:安全等于运算符<=>。

运算符示例六

SELECT name, remark
FROM Test
WHERE remark <=> NULL
nameremark
testNULL

可以看到查出了remark值为NULL的结果。

安全等于运算符(<=>)与等于运算符(=)的作用是相似的,唯一的区别是(<=>)可以用来对NULL进行判断。在两个操作数均为NULL时,其返回值为1,而不是NULL;当一个操作数为NULL时,其返回值为0,而不为NULL。