MySQL中不等于筛选时会漏掉null值的问题

一、问题描述

MySQL中使用不等于进行筛选数据时,若筛选值为null,则该条数据不会被选中,如何解决该问题?

表示不等于的方式如下:

!=
<>
not in

二、案例验证

1、创建数据表

-- ----------------------------
-- Table structure for table_test
-- ----------------------------
DROP TABLE IF EXISTS `table_test`;
CREATE TABLE `table_test`  (`A` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`B` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact;-- ----------------------------
-- Records of table_test
-- ----------------------------
INSERT INTO `table_test` VALUES ('张三', '1');
INSERT INTO `table_test` VALUES ('罗某', '0');
INSERT INTO `table_test` VALUES ('张麻子', NULL);

在这里插入图片描述

2、三种方式进行查询

-- 情况一
select * from table_test where B != '1';
-- 情况二
select * from table_test where B <> '1';
-- 情况三
select * from table_test where B not in ('1') ;

情况一:

在这里插入图片描述

情况二:

在这里插入图片描述

情况三:

在这里插入图片描述

三、结论

​ 使用上述三种不等于方式作为SQL筛选条件时,需考虑条件字段是否为null的情况;若不考虑,此条件会将字段为 Null 的数据也当做满足不等于的条件而将数据筛选掉。

四、优化方法

-- 第一种:增加“ or B is null ”,对null值的数据进行单独判断
select * from table_test where B != '1' or B is null;
select * from table_test where B <> '1' or B is null;
select * from table_test where B not in ('1') or B is null;-- 第二种:
-- IFNULL(expr1, expr2); 其中,expr1 是需要检测的表达式,expr2 是用于替换 NULL 值的值。
-- 判断第一个表达式是否为 NULL,如果为 NULL 则返回第二个参数的值,如果不为 NULL 则返回第一个参数的值
select * from table_test where IFNULL(B,'')  != 1;

第一种:

在这里插入图片描述

第二种:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/49404.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【2024最新版】Stable diffusion汉化版安装教程(附SD安装包),一键激活,永久免费!

目前广泛使用的Stable Diffusion Web UI简称(SDWebUI)是发布在开源平台Github上的一个Python项目,与通常的软件安装方法不同,这个项目并不是下载并安装即可使用的应用程序,而是需要准备执行环境,编译源码. 如果你是一个新手不会安装,现在可以直接使用一键启动包. 例如:国内的…

AI驱动的在线面试系统:技术革新与初步面试的新体验

一、引言 在数字化和智能化的时代背景下&#xff0c;人工智能&#xff08;AI&#xff09;技术正日益渗透到各行各业&#xff0c;为人们的生活和工作带来前所未有的变革。其中&#xff0c;AI驱动的在线面试系统&#xff0c;凭借其高效、便捷、公正等特性&#xff0c;逐渐成为企业…

ATF-541M4全解析(一)

目录 一、描述二、规格三、各参数最大值四、25℃下的典型值 一、描述 安华高科技 (Avago Technologies) 的 ATF-541M4 是一款高线性度、低噪声、单电源供电的E-PHEMT&#xff0c;封装在一个微型无引脚封装中。 ATF-541M4 的小尺寸和低外形使其非常适合用于混合模块和其他空间…

美团测开面经整理大汇总!!

大厂测开面经&#xff0c;加油加油&#xff0c;一周看一篇 美团测开面经美团测开暑期实习面经第二弹美团-地图服务部测开一面面经&#xff08;70min&#xff09;美团-优选事业部测开一面面经美团-优选事业部测开二面面经&#xff08;82min&#xff09;美团第一次测开笔试美团测…

matplotlib 画图函数,最常用的

并排显示2个图片 import os import numpy as np from PIL import Image import matplotlib.pyplot as pltimage1 Image.open(a.png) image2 Image.open(a2.png)# Create a figure with two subplots (1 row, 2 columns) fig, axes plt.subplots(1, 2, figsize(10, 5))# Di…

【Git-驯化】一文搞懂git中rm命令的使用技巧

【Git-驯化】一文搞懂git中rm命令的使用技巧 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 免费获取相关内容文档关注&#xff1a;微信公…

git学习笔记(总结了常见命令与学习中遇到的问题和解决方法)

前言 最近学习完git&#xff0c;学习过程中也遇到了很多问题&#xff0c;这里给大家写一篇总结性的博客&#xff0c;主要大概讲述git命令和部分难点问题&#xff08;简单的知识点这里就不再重复讲解了&#xff09; 一.git概述 1.1什么是git Git是一个分布式的版本控制软件。…

【推研小灶】复旦与南大之间:一次独特的计算机保研之旅

写在前面 上午10点填完志愿等待复试通知&#xff0c;利用这段时间记录一下我简短的夏令营和预推免。今年变为线下之后&#xff0c;部分学校的入营情况、考核方式有明显变化。加上CS方向保研名额总体变多&#xff0c;形势有点小乱&#xff0c;甚至填报系统都在9.29中秋节当天&a…

嵌入式C++、Raspberry Pi、LoRa和Wi-Fi技术、TensorFlow、ROS/ROS2:农业巡检数据导航机器人设计流程(代码示例)

随着科技的不断进步&#xff0c;农业领域也在逐渐向智能化发展。农业巡检机器人作为农业智能化的重要组成部分&#xff0c;能够自动化地监测农作物生长状况&#xff0c;提高农业管理的效率和精确度。本文将介绍一个基于Raspberry Pi和NVIDIA Jetson的农业巡检机器人&#xff0c…

【我的养猪日记】区块链游戏

剧情介绍 年少无知留给了故乡&#xff0c;谦卑有礼送给了远方&#xff0c;有工作的地方没家&#xff0c;有家的地方没工作&#xff0c;他乡留不下灵魂&#xff0c;故乡安不了肉身&#xff0c;从此便有了漂泊。在外漂泊数年的你每天过着&#xff0c;挤不完的公交地铁、交不完的房…

keyring 库

目录 安装 keyring 基本用法 1. 设置密码 2. 获取密码 3. 删除密码 4. 返回当前使用的默认密钥环 5. 列出所有密码 支持的后端 keyring 是一个 Python 库&#xff0c;用于将敏感信息&#xff08;如密码&#xff09;安全地存储在操作系统的密码管理器中。它支持多种平台…

VUE3学习第三篇:报错记录

1、在我整理好前端代码框架后&#xff0c;而且也启动好了对应的后台服务&#xff0c;访问页面&#xff0c;正常。 2、报错ReferenceError: defineModel is not defined 学到这里报错了 在vue网站的演练场&#xff0c;使用没问题 但是在我自己的代码里就出问题了 3、watchEffec…

记一次使用GenericObjectPool的体验,避免自己重复造轮子

概述 相信大家在日常的开发中&#xff0c;或多或少都接触过对象池、连接池等池化的内容&#xff0c;可能还自己手动实现或维护过这种 “池子”。 我也曾干过这种事情。当时要连接一个第三方平台进行接口调用&#xff0c;为了减少耗时和提升稳定性&#xff0c;手动实现了一个连…

HashMap存储数据的put()方法

1. 计算哈希值 2. 处理哈希值 3.查找链表 4. 检查键的存在性 5. 插入新键值对 6. 检查扩容 总结 put()方法是HashMap中用于插入或更新键值对的基本方法。使用 put()方法时&#xff0c;会执行以下步 骤&#xff1a; 1. 计算哈希值 在调用 put(key, value)方法时&#xff0c;首先…

网友提问:桌面与web开发哪个难度更大?

关于桌面应用开发与Web开发哪个难度更大的问题&#xff0c;实际上并没有绝对的答案&#xff0c;因为这取决于具体的开发任务、所使用的工具和技术栈等因素。不过&#xff0c;我们可以从几个方面来进行比较&#xff1a; 技术栈 Web开发&#xff1a; 前端通常涉及到HTML、CSS、J…

用Python编写自动答题脚本——该如何写呢?

编写一个Python自动答题脚本的复杂性和方法将取决于你所要答题的系统的具体实现和限制。以下是一个简化的流程&#xff0c;以及如何在不同情境下编写自动答题脚本的基本思路。 1. 确定答题系统的交互方式 首先&#xff0c;你需要了解答题系统是如何与用户交互的。这可能包括&…

Django—admin后台管理

Django官网 https://www.djangoproject.com/ 如果已经有了Django跳过这步 安装Django&#xff1a; 如果你还没有安装Django&#xff0c;可以通过Python的包管理器pip来安装&#xff1a; pip install django 创建项目&#xff1a; 使用Django创建一个新的项目&#xff1a; …

[Mysql-DDL数据操作语句]

目录 DDL语句操作数据库 库&#xff1a; 查看&#xff1a;show 创建&#xff1a;creat 删除&#xff1a;drop 使用(切换)&#xff1a;use 表&#xff1a; 查看&#xff1a;desc show 创建&#xff1a;create 表结构修改 rename as add drop modify change rename as …

unity对一些列点按顺序围成的封闭区域进行填充mesh

在Unity中&#xff0c;要对一系列顶点按顺序围成的封闭区域进行填充成Mesh&#xff0c;你可以采取以下步骤&#xff1a; 定义顶点数组&#xff1a; 首先&#xff0c;你需要定义一个顶点数组&#xff0c;其中包含封闭区域的所有顶点的位置信息。 定义三角形索引数组&#xff1a…

探索Linux-1-虚拟机远程登陆XShell6远程传输文件Xftp6

Linux是什么&#xff1f; Linux是一个开源的操作系统内核&#xff0c;由林纳斯托瓦兹&#xff08;Linus Torvalds&#xff09;于1991年首次发布。它基于Unix操作系统&#xff0c;但提供了更多的自由和灵活性。Linux内核是操作系统的核心部分&#xff0c;负责管理系统资源、处理…