假设有一数据表的状态字段设计为varchar类型,有以下值:NULL,pending,refund,cancel.我们知道查询状态为cancel的订单,SQL语句可以这样写:SELECT * FROM qorder WHERE status = 'cancel'SQL语句能查询出正确的数据,但是当我们想查询状态为非cancel的订单时,可能会出麻烦, 因为status字段没 有设置NOT NULL,所以大部分订单的status值都是NULL,这样的话,用'<>'查询出来的数据不正确,只有status除了cancel之外的非空数据查询出来了,而为NULL的没有查询出来。

SELECT * WHERE status <>'cancel' 原 因:NULL值操作NULL值可能令人感到奇怪直到你习惯它。概念上,NULL意味着“没有值”或“未知值”,且它被看作与众不同的值。为了测试NULL,你不能使用算术比较 操作符例如=、 SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL;+----------+-----------+----------+----------+| 1 = NULL | 1 <> NULL | 1 < NULL | 1 > NULL |+----------+-----------+----------+----------+| NULL | NULL | NULL | NULL |+----------+-----------+----------+----------+很 显然你不能通过这些比较得到有意义的结果。

相反使用IS NULL和IS NOT NULL操作符:mysql> SELECT 1 IS NULL, 1 IS NOT NULL;+-----------+---------------+| 1 IS NULL | 1 IS NOT NULL |+-----------+---------------+| 0 | 1 |+-----------+---------------+请注意在MySQL中,0或 NULL意味着假,而其它值意味着真。布尔运算的默认真值是1。根据以上的NULL值操作结果,最终使用此种方式解决:SELECT *qorder  WHERE IFNULL(status,'pending') <>'cancel'

IFNULL(expr1,expr2)

如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2。IFNULL()返回一个数字或字符串值,取决于它被使 用的上下文环境。

mysql> select IFNULL(1,0); ->1

mysql> select IFNULL(0,10); ->0

mysql> select IFNULL(1/0,10); ->10.0000

mysql> select IFNULL(1/0,'yes'); ->'yes'IF(expr1,expr2,expr3)如果expr1是TRUE(expr1<>0且expr1<>NULL),那么IF()返回 expr2,否则它返回expr3。IF()返回一个数字或字符串值,取决于它被使用的上下文。

mysql> select IF(1>2,2,3); -> 3

mysql> select IF(1<2,'yes','no'); -> 'yes'

ifnull mysql 所有列_mysql IFNULL IF相关推荐

  1. ifnull mysql date_mysql中的ifnull函数使用

    ifnull 是mysql的一个内置函数 ifnull(expr1,expr2) 如果expr1的值为null,这个时候返回expr2.否则如果expr1的值不是null,就直接返回expr1 下面是 ...

  2. mysql 添加列_MySQL 数据库如何添加列

    当进行 加列操作 时,所有的数据行 都必须要 增加一段数据(图中的 列 4 数据) 如上一期图解所讲,当改变数据行的长度,就需要 重建表空间(图中灰蓝的部分为发生变更的部分) 数据字典中的列定义也会被 ...

  3. mysql忽略列_mysql – 使用SQL语句更改忽略表添加列(如果不存在)

    根据 documentation: IGNORE is a MySQL extension to standard SQL. It controls how ALTER TABLE works if ...

  4. mysql 添加列_mysql中添加列、修改列、删除列的方法

    本节内容: ALTER TABLE:添加,修改,删除表的列,约束等表的定义. 操作语句: 查看列:desc 表名; 修改表名:alter table t_book rename to bbb; 添加列 ...

  5. mysql 临时列_mysql – 在SQL中添加一个临时列,其中值取决于另一列

    我有这张桌子: ID | name | result | -------------------- 1 | A | 1 | -------------------- 2 | B | 2 | ----- ...

  6. mysql 200列_Mysql数据表基本

    bit[(M)] 二进制位(101001),m表示二进制位的长度(1-64),默认m=1tinyint[(m)] [unsigned] [zerofill] 小整数,数据类型用于保存一些范围的整数数值 ...

  7. mysql数据库最多列_mysql多列索引和最左前缀

    数据库的索引可以加快查询速度,原因是索引使用特定的数据结构(B-Tree)对特定的列额外组织存放,加快存储引擎(索引是存储引擎实现)查找记录的速度. 索引优化是数据库优化的最重要手段. 如果查询语句使 ...

  8. mysql 指定位置添加列_给MySQL表增加指定位置的列_MySQL

    ALTER TABLE test ADD COLUMN id INT UNSIGNED NOT NULL auto_increment PRIMARY KEY FIRST 给表添加列是一个常用的操作, ...

  9. mysql 分组 列转行,mysql列转行以及年月分组_MySQL

    bitsCN.com mysql列转行以及年月分组 Java代码 SELECT count(DISTINCT(a.rect_id)) zcount, a.job_dept, DATE_FORMAT(s ...

最新文章

  1. 利用Proceesson在线绘制流程图实例演练!流程图的要点和注意事项说明
  2. Preparation for International Women's Day
  3. java 8中 predicate chain的使用
  4. C#为什么要用到 try...catch... 呢?
  5. oledb excel java_C#中Excel 2016的oledb连接字符串
  6. 钉钉api 获取 accesstoken_Thinkphp5.X异常接管后通过钉钉机器人推送通知
  7. java mybatis 返回map_mybatis返回map集合的格式是什么?mybatis返回map集合实例
  8. 2021年内衣品牌营销传播方案-婧麒+美柚.pdf(附下载链接)
  9. java金蝶云单据查询_如果在单据上查或下查的“单据关联”界面添加功能
  10. 图像深度:8bit、16bit、24bit、32bit; 16.7M色彩
  11. 免费可商用图片网站整理
  12. 实时应用监控平台CAT
  13. python视频操作——python实现读取和保存视频
  14. 【计网】DNS解析 DDNS解决动态公网IP访问
  15. Google VR开发-Cardboard VR SDK反畸变实现
  16. Android逆向入门6——定位到小红书Sign算法
  17. FRP (高性能反向代理应用)
  18. 返回值取vector容器的前n个元素
  19. 手机网站开发必修课[1]:手机浏览器
  20. 利好消息!康复肺炎患者抗体血浆有助于拯救危重病人!捐献号召一呼百应

热门文章

  1. 计算机图形学:三次Bezier曲线的绘制(算法原理及代码实现)
  2. python程序封装
  3. Chromium内核浏览器编译记(一)踩坑实录
  4. 5分钟商学院-个人篇-演讲能力
  5. uniapp 发行 原生APP本地打包 安卓APK(最全的步骤)
  6. 微信内置浏览器video标签自动全屏播放以及层级过高问题
  7. 嵌入式开发板上基于RTL8188EUS搭建AP
  8. HDU-4856 Tunnels(BFS+状压DP)
  9. Spring Boot SpotBugs
  10. 用redis做注册中心如何感知服务的上线和下线?