一起养成写作习惯!这是我参与「掘金日新计划 · 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 = 1 | 1 != 1 |
|---|---|
| 1 | 0 |
可以看到1 = 1结果是1,也就是真。1 != 1结果是0,也就是假。
运算符示例二
SELECT 1 = '1', 1 = 'a', 0 = 'a'
FROM DUAL
| 1 = '1' | 1 = 'a' | 0 = 'a' |
|---|---|---|
| 1 | 0 | 1 |
可以看到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' |
|---|---|
| 1 | 0 |
可以看到'a' = 'b',结果是0。这里没有进行隐式转换成0进行比较,所以如果是单纯的字符串进行比较的话,不会进行隐式转换,会按照字符串进行比较,其比较的是每个字符串中字符的ANSI编码是否相等。
运算符示例四
SELECT 1 = NULL, NULL = NULL
FROM DUAL
| 1 = NULL | NULL = NULL |
|---|---|
| NULL | NULL |
可以看到结果都是NULL,由此得出结论:只要有NULL参与判断,结果就为NULL。
运算符示例五
下面我们查找一下表中备注字段值为NULL的结果。
SELECT name, remark
FROM Test
WHERE remark = NULL
| name | remark |
|---|
可以看到没有结果,但是实际表中remark字段是有NULL值的,为什么没有查出结果。这是因为查询的时候条件是1的结果才会查出来,这里条件是remark = NULL,运算后的结果是NULL,而不是1,所有查不出结果。 那我们确实需要查出字段为NULL值的结果,怎么做呢?这里需要使用运算符:安全等于运算符<=>。
运算符示例六
SELECT name, remark
FROM Test
WHERE remark <=> NULL
| name | remark |
|---|---|
| test | NULL |
可以看到查出了remark值为NULL的结果。
安全等于运算符(<=>)与等于运算符(=)的作用是相似的,唯一的区别是(<=>)可以用来对NULL进行判断。在两个操作数均为NULL时,其返回值为1,而不是NULL;当一个操作数为NULL时,其返回值为0,而不为NULL。