`

MySQL查询中的非空问题

 
阅读更多

MySQL查询是我们经常会用到的操作,下面将为您分析MySQL查询中的非空问题,希望对您学习MySQL查询方面能够有些许的帮助。

表的订单状态字段设计为varchar类型,有以下值:NULL,pending,pending refund,refund,cancel.我们知道查询状态为cancel的订单,SQL语句可以这样写:

SELECT o.oid,o.moneyreceipt,o.moneyget,o.thecurrency,o.status FROM qorder o WHERE o.status = 'cancel' SQL语句能查询出正确的数据,但是当我们想查询状态为非cancel的订单时,可能会出麻烦, 因为status字段没有设置NOT NULL,所以大部分订单的status值都是NULL,这样的话,用'<>'查询出来的数据不正确,只有status除了cancel之外 的非空数据查询出来了,而为NULL的没有查询出来。SELECT o.oid,o.moneyreceipt,o.moneyget,o.thecurrency,o.status FROM qorder o WHERE o.status <> 'cancel'原 因:NULL值操作
NULL值可能令人感 到奇怪直到你习惯它。概念上,NULL意味着“没有值”或“未知值”,且它被看作与众不同的值。为了测试NULL,你不能使用算术比较 操作符例如=、<或!=。为了说明它,试试下列查询:

mysql> 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 o.oid,o.moneyreceipt,o.moneyget,o.thecurrency,o.status FROM qorder o WHERE IFNULL(o.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'  mysql> select IF(strcmp('test','test1'),'yes','no'); -> 'no'  expr1作为整数值被计算,它意味着如 果你正在测试浮点或字符串值,你应该使用一个比较操作来做。

mysql> select IF(0.1,1,0);  -> 0  mysql> select IF(0.1<>0,1,0);  -> 1  在上面的第一种情况中,IF(0.1)返回0,因为0.1被变换 到整数值, 导致测试IF(0)。这可能不是你期望的。在第二种情况中,比较测试原来的浮点值看它是否是非零,比较的结果被用作一个整数。

CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END    CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END    第一个版本返回 result,其中value=compare-value。第二个版本中如果第一个条件为真,返回result。如果没有匹配的result值,那么结 果在ELSE后的result被返回。如果没有ELSE部分,那么NULL被返回。

mysql> SELECT CASE 1 WHEN 1 THEN "one" WHEN 2 THEN "two" ELSE "more" END; -> "one"  mysql> SELECT CASE WHEN 1>0 THEN "true" ELSE "false" END;  -> "true"  mysql> SELECT CASE BINARY "B" when "a" then 1 when "b" then 2 END; -> NULL   


分享到:
评论

相关推荐

    MySQL查询空字段或非空字段(is null和not null)

    本文介绍在MySQL中,面对值为空(NULL)的字段,应该如何查询。怎么判断一个字段的值为NULL或不为NULL,需要的朋友可以参考下

    MySQL非空约束(not null)案例讲解.doc

    MySQL非空约束(not null)案例讲解.doc

    MySQL DML - 条件查询.md

    此Markdown文档提供了MySQL数据库中条件查询的DML操作示例代码和说明。通过文档,您可以学习如何使用`SELECT`语句和不同的条件查询语句从表中检索满足特定条件的数据。 示例代码演示了根据单个条件、多个条件、逻辑...

    掌握MySQL面试技巧.pptx

    2、MySQL索引:索引是MySQL中优化查询性能的重要手段,会影响到数据库的查询速度和数据唯一性等方面。因此,在面试过程中,需要掌握索引的各种类型以及创建、调整、删除等操作。 3、MySQL约束:约束是用来限制MySQL...

    动力节点MySQL数据库入门视频教程-086-非空约束

    动力节点的杜老师讲述的mysql教程,详细讲解了MySQL的相关知识,包括MySQL概述,MySQL应用环境,MySQL系统特性,MySQL初学基础,MySQL管理工具,如何安装MySQL及MySQL新特性,通过观看可掌握MySQL全套知识。

    MySQL中建表时可空(NULL)和非空(NOT NULL)的用法详解

    对于MySQL的一些个规范,某些公司建表规范中有一项要求是所有字段非空,意味着没有值的时候存储一个默认值。其实所有字段非空这么说应该是绝对了,应该说是尽可能非空,某些情况下不可能给出一个默认值。 那么这条...

    动力节点MySQL数据库入门视频教程-087-非空约束测试

    动力节点的杜老师讲述的mysql教程,详细讲解了MySQL的相关知识,包括MySQL概述,MySQL应用环境,MySQL系统特性,MySQL初学基础,MySQL管理工具,如何安装MySQL及MySQL新特性,通过观看可掌握MySQL全套知识。

    MySQL约束(主键,唯一,非空,外键)

    MySQL约束(主键,唯一,非空,外键) 概念: 对表中的数据进行限定,保证数据的正确性、有效性和完整性。 分类: 1. 主键约束:primary key 2. 非空约束:not null 3. 唯一约束:unique 4. 外键约束:foreign key ...

    E096-数据库安全-mysql用户权限设置及登陆限制.pdf

    E096-数据库安全-mysql用户权限设置及登陆限制

    数据库基础实验的实验报告附图

    2.对各表中的数据进行不同条件的连接查询和嵌套查询; 1) 查询每个学生及其选课情况; 2) 查询每门课的间接先修课 3) 将STUDENT,SC进行右连接 4) 查询有不及格的学生姓名和所在系 5) 查询所有成绩为优秀...

    mysql数据库的基本操作语法

    MySQL中约束保存在information_schema数据库的table_constraints中,可以通过该表查询约束信息; 约束主要完成对数据的检验,保证数据库数据的完整性;如果有相互依赖数据,保证该数据不被删除。 常用五类约束: ...

    MySQL——表的约束

    表的约束,主键 候选键 非空约束 默认值,创建主键(表级方式和列级方式 单列主键,复合主键)修改主键 删除主键;创建候选键 修改候选键 删除候选键;创建非空约束 删除非空约束;添加默认值 修改默认值;

    mysql datetime查询异常问题解决

    描述:非空无默认值的Datetime类型字段,查询时程序报以下错误: Value ‘0000-00-00 00:00:00’ can not be represented as java.sql.Timestamp 解决方法:数据库连接串添加zeroDateTimeBehavior参数或者...

    mysql基础操作及案例分析

    主键的作用(主键约束,自增长约束auto_increnment,非空约束-not null,唯一约束unique,默认约束default,零填充约束zerofill) DQL操作(排序查询,聚合查询,分组查询,分页查询limit,正则表达式)、 多表操作...

    mysql上机试题和答案.zip

    MySQL上机操作 1.创建数据库,名称为MyBank 2.创建数据表customer(客户)、deposite(存款)、bank(银行),表结构如下: customer的表结构 属性名称 类型与长度 中文含义 备注 c_id char(6) 客户标识 主键,非空 ...

    Mysql经典面试题.pdf

    1.什么是索引?为什么要使用索引? 索引是一种数据结构,用于提高数据库的查询效率。它类似于书籍的目录,可以帮助数据库直接定位到指定的数据,...在MySQL中,常见的连接方式有内连接(INNER JOIN)、左连接(LEFT JO

    MySQL使用入门

    文章目录MySQLDDL: CRUD数据库的CRUD创建查询修改删除使用数据库数据库表的CURD创建查询修改删除DML: 增删表中数据添加数据删除数据修改数据DQL: 查询表中的记录基础查询条件查询排序查询聚合函数分组查询分页查询...

    mysql数据库操作

    a:查询表中全部数据 select * from 表名; 四、查数据 1、基本语法 格式:select * from 表名; 说明: a、from关键字后面是表名,表示数据来源于这个表 b、Select后面写表中的列名,如果是*表示在结果集中显示表中...

    MySQL Workbench使用手册大全

    NN:not null 非空 UQ:unique 唯一索引 BIN:binary 二进制数据(比text更大) UN:unsigned 无符号(非负数) ZF:zero fill 填充0 例如字段内容是1 int(4), 则内容显示为0001 AI:auto increment 自增 然后点击...

    mysql中coalesce()的使用技巧小结

    最近无意间发现mysql的coalesce,又正好有时间,就把mysql中coalesce()的使用技巧总结下分享给大家,下面来一起看看详细的介绍: coalesce()解释 返回参数中的第一个非空表达式(从左向右依次类推); 使用示例 a,b,...

Global site tag (gtag.js) - Google Analytics