`

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值在SQL中代表未知或者未定义,它与空字符串或零值有着本质的区别。本文将深入探讨如何使用`IS NULL`和`IS NOT NULL`条件来...

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

    在上面的示例中,name 字段被设置为非空约束,即该字段的值不能为空。 修改表时设置非空约束 如果在创建表时忘记了为字段设置非空约束,也可以通过修改表进行非空约束的添加。例如,修改 tb_dept4 表,使得部门...

    MySQL数据库PDF文档

    本文档主要介绍了MySQL数据库的基本概念、数据类型、SQL语言、约束条件、查询语言、聚合函数、子查询和多表查询等知识点。 数据库基础概念 在介绍MySQL数据库之前,首先需要了解数据库的基本概念。数据库是一个...

    MySQL单表查询练习

    ### MySQL单表查询练习知识点详解 #### 1. 查看EMP表中部门号为5的员工的姓名,职位,参加工作...以上就是针对MySQL单表查询练习题中的知识点详细解释。通过这些练习题,你可以更好地掌握MySQL查询的基础语法和技巧。

    J2ME+servlet+mysql查询数据

    4. 如果参数非空,使用JDBC连接MySQL数据库,执行查询操作。 5. 处理查询结果,可能包括遍历`ResultSet`对象(`ResultSet rs = stmt.executeQuery(sql);`),获取元数据(`ResultSetMetaData rsmd = rs.getMetaData...

    23个Mysql常用语句查询 最新 最全

    ### MySQL 常用查询语句详解 ...以上介绍了MySQL中常用的23种查询语句,涵盖了数值型、字符串、日期型等多种数据类型的查询方法以及各种复杂的查询需求。通过这些查询语句,开发者可以更高效地管理数据库中的数据。

    MySQL数据库应用形考实验1-4全答案.zip

    在这个"MySQL数据库应用形考实验1-4全答案.zip"压缩包中,包含了四个关于MySQL基础操作的实验训练,涵盖了从数据库和表的创建,到数据的查询、增删改,以及数据库系统的维护等关键知识点。以下是对这些实验的详细...

    MySQL操作手册v1.0.pdf

    手册中首先提到了Linux平台下的MySQL安装方法,包括Ubuntu和CentOS两种主流Linux发行版的安装命令,并提到了配置文件目录的所在位置。接着,手册详细介绍了密码的修改过程,以及登录MySQL服务器的方法,强调了在...

    Mysql从入门到精通.pdf

    8. 中文乱码解决:在使用MySQL时,经常会遇到中文乱码的问题。解决方法是在建立数据库或表时指定字符集为utf8,并在连接数据库时确保客户端的字符集设置正确。 9. IP连接控制:可以为MySQL用户设置只能从特定的IP...

    网易技术部的MySQL中文资料

    MySQL中的SQL主要包括数据查询、数据插入、数据更新和数据删除等操作。学会编写SELECT语句来获取所需信息,INSERT语句来添加新记录,UPDATE语句来修改现有数据,以及DELETE语句来删除不再需要的记录,是MySQL学习的...

    MySQL笔记,含有一些较难的查询例子

    ### MySQL基础知识及高级查询技巧详解 #### 一、MySQL简介 MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),以其高性能、稳定性和易用性著称。它支持SQL(Structured Query Language,结构化查询语言),...

    B4A_连接MySQL实现登录注册

    MySQL是一种开源、免费的关系型数据库管理系统,广泛应用于Web应用中。在登录注册系统中,MySQL将存储用户的账户信息,如用户名、密码等。创建一个包含用户表的数据库是实现这一功能的第一步。 三、连接MySQL 1. ...

    MYSQL一头扎进MYSQL

    5. 索引:索引是提高查询速度的关键,MySQL支持B树索引、哈希索引等,常见的有主键索引(唯一且非空)、唯一索引(唯一但可为空)和普通索引。 6. 存储引擎:MySQL支持不同的存储引擎,如InnoDB(默认,支持事务...

    MySQL数据库基础与实例教程所有资源

    在MySQL中,数据存储在表格中,表格之间可以建立关联,形成复杂的数据库结构。MySQL支持多种数据类型,如整数、浮点数、字符串、日期和时间等,可以根据实际需求选择合适的数据类型存储数据。 接下来,我们关注的是...

    MySql数据库测试程序

    在本文中,我们将深入探讨如何使用C++ Builder与MySQL数据库进行交互,实现一系列数据库操作功能。MySQL是一款流行的开源关系型数据库管理系统,而C++ Builder则是一个强大的开发环境,支持多种数据库连接,包括...

    mysql练习使用脚本.zip

    子查询允许在一个查询中嵌套另一个查询,是解决复杂查询问题的有效工具。通过练习,掌握如何使用子查询来过滤结果、比较值或计算结果。 7. **存储过程和函数** MySQL中的存储过程和函数可以封装复杂的操作,提高...

    MySQL教程.docx

    * MySQL 非空约束 * MySQL 查看表中的约束 * MySQL 常用运算符 * MySQL 算术运算符 * MySQL 逻辑运算符 * MySQL 比较运算符 * MySQL 位运算符 * MySQL 运算符优先级 * MySQL IN 和 NOT IN * MySQL 函数简介

    MYSQLWorkBench中文教程.pdf

    在本次教程中,我们会涵盖如何使用MySQL Workbench进行基本的数据库操作、创建ER模型、管理数据库连接以及如何使用其SQL编辑器。由于文档部分文字经过OCR扫描后存在识别错误或遗漏,我们将根据提供的内容进行逻辑上...

    mysql教程+手册

    索引是提升查询速度的关键,可以使用主键(唯一且非空的索引)和唯一索引来确保数据的唯一性。普通索引则提供快速访问数据的途径。视图可以理解为虚拟表,基于一个或多个表的查询结果,方便复杂查询和数据保护。存储...

Global site tag (gtag.js) - Google Analytics