网站首页 > 技术文章 正文
运算符:!=、<>、is not
在MySQL中!= 和 <> 的功能一致,在sql92规范中的建议是使用:!=,新的规范中建议使用: <>。但是不管是!=还是<>都无法和 NULL 配合使用来查询数据,这个时候就需要使用is not。
我们来看一个简单的示例。
// <>、!=配合非null的值查找数据
SELECT * FROM user WHERE userName <> "li.zhou"
SELECT * FROM user WHERE userName != "li.zhou"
// is not 配合 null 查出userName不是null的数据
SELECT * FROM user WHERE userName is not null
运算符:=、<=>、is
is 专门用来判断是否为 NULL,而 = 则是用来判断NULL以外的所有数据类型,而 <=> 就是他们2个结合体。所以当传入的参数存在NULL的可能的情况下,一定要使用 <=> 而不是 =。
另外当两个可能存在NULL的列进行比较的时候,比如列A和列B,当A和B均为NULL的时候,A = B 返回的是false,而 A <=> B 的结果则是 true。
最后,<=> 只用于MySQL数据库,其他数据库是不支持的,千万要注意。
最后我们再看来一个示例:
先准备一个表格,如下:
+----+-----------+----------+
| id | userName | password |
+----+-----------+----------+
| 1 | li.zhou | NULL |
| 2 | NULL | abc |
| 3 | NULL | NULL |
先运行3个输入不为NULL的sql命令:
// 能找到数据
SELECT * FROM user WHERE userName = "li.zhou"
// 直接执行异常
SELECT * FROM user WHERE userName is "li.zhou"
// 能找到数据
SELECT * FROM user WHERE userName <=> "li.zhou"
再运行3个输入为NULL的sql命令
// 不能找到数据
SELECT * FROM user WHERE userName = null
// 能找到数据
SELECT * FROM user WHERE userName is null
// 能找到数据
SELECT * FROM user WHERE userName <=> null
最后再运行2个进行比较的sql
// 不能找到数据
SELECT * FROM user WHERE userName = password
// 能找到第三条数据
SELECT * FROM user WHERE userName <=> password
猜你喜欢
- 2024-11-18 MySQL中多表联合查询与子查询的这些区别,你可能不知道
- 2024-11-18 Mysql实战总结&面试20问
- 2024-11-18 MySQL的备份与还原,非常规备份,全量备份,增量备份
- 2024-11-18 MySQL范围查询与优化
- 2024-11-18 云数据库ClickHouse二级索引 - 最佳实践
- 2024-11-18 分享一个小技巧——mysql统一处理创建时间和更新时间
- 2024-11-18 神奇了,当Mysql查询条件为“>=”时,竟然不走索引?
- 2024-11-18 京东面试:说说MySQL的架构体系
- 2024-11-18 C#生态下的又一个佳作——FreeSql (O/RM)
- 2024-11-18 MySQL:count(*)为什么这么慢?
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)