在MySQL中 NULL的含义是_null有哪些常见的意思?(如何正确理解 SQL 中的 NULL)
SELECT * FROM SOME_TABLEWHERE SOME_COLUMN IS NULL
或者这样写:
复制代码WHERE SOME_COLUMN = 1
正确的写法应该是第二种(WHERE SOME_COLUMN IS NULL)。
为什么要这样写?
在进行数据库数据比较操作时,我们不会使用“IS”关键词,不是吗?
例如,如果我们想要知道一个列的值是否等于 1,WHERE 语句是这样的:
复制代码WHERE SOME_COLUMN = 1
那为什么 NULL 值要用 IS 关键字呢?为什么要以这种方式来处理 NULL?
因为,在 SQL 中,NULL 表示“未知”。也就是说,NULL 值表示的是“未知”的值。
NULL 等于未知
在大多数数据库中,NULl 和空字符串是有区别的。
但并不是所有数据库都这样,例如,Oracle 就不支持空字符串,它会把空字符串自动转成 NULL 值。
在其他大多数数据库里,NULL 值和字符串的处理方式是不一样的:空字符串表示“没有值”,这个值是已知的。
NULL 表示“未知值”,这个值是未知的。
这就好比我问了一个问题:“美国总统罗斯福的中间名是什么”?可能有人会回答说:“我不知道罗斯福总统的中间名是什么”。对于这种情况,可以在数据库中使用 MIDDLE_NAME 列来表示罗斯福的中间名,而这一列的值为 NULL。
也可能有人会回答说:“罗斯福总统没有中间名。他的父母没有给他取中间名,所以我知道罗斯福总统确实没有中间名”。对于这种情况,MIDDLE_NAME 列应该是一个空字符串。
Oracle 比较特殊,两个值都使用 NULL 来表示,而其他大多数数据库会区分对待。
但只要记住 NULL 表示的是一个未知的值,那么在写 SQL 查询语句时就会得心应手。
例如,如果你有一个这样的查询语句:
复制代码SELECT * FROM SOME_TABLEWHERE 1 = 1
这个查询会返回所有的行(假设 SOME_TABLE 不是空表),因为表达式“1=1”一定为 true。
如果我这样写:
复制代码SELECT * FROM SOME_TABLEWHERE 1 = 0
表达式“1=0”是 false,这个查询语句不会返回任何数据。
但如果我写成这样:
复制代码SELECT * FROM SOME_TABLEWHERE 1 = NULL
这个时候,数据库不知道这两个值(1 和 NULL)是否相等,所以它也不会返回任何数据。
三元逻辑
SQL 查询语句中的 WHERE 一般会有三种结果:它可以是 true(这个时候会返回数据);
它可以是 false(这个时候不会返回数据);
它也可以是 NULL 或未知(这个时候也不会返回数据)。
你可能会想:“既然这样,那我为什么要去关心是 false 还是 NULL?它们不是都不会返回数据吗?”
接下来,我来告诉你在哪些情况下会有问题:我们来看看 NOT()。
假设有这样的一个查询语句:
复制代码SELECT * FROM SOME_TABLEWHERE NOT(1 = 1)
数据库首先会计算 1=1,这个显然是 true。
接着,数据库会应用 NOT() 条件,所以 WHERE 返回 false。
所以,上面的查询不会返回任何数据。
但如果把语句改成这样:
复制代码SELECT * FROM SOME_TABLEWHERE NOT(1 = 0)
数据库首先会计算 1=0,这个肯定是 false。
接着,数据库应用 NOT() 条件,这样就得到相反的结果,变成了 true。
所以,这个语句会返回数据。
但如果把语句再改成下面这样呢?
复制代码SELECT * FROM SOME_TABLEWHERE NOT(1 = NULL)
数据库首先计算 1=NULL,它不知道 1 是否等于 NULL,因为它不知道 NULL 的值是什么。
所以,这个计算不会返回 true,也不会返回 false,它会返回一个 NULL。
接下来,NOT() 会继续解析上一个计算返回的结果。
当 NOT() 遇到 NULL,它会生成另一个 NULL。未知的相反面是另一个未知。
所以,对于这两个查询:
复制代码SELECT * FROM SOME_TABLEWHERE NOT(1 = NULL)
和
复制代码SELECT * FROM SOME_TABLEWHERE 1 = NULL
都不会返回数据,尽管它们是完全相反的。
NULL 和 NOT IN
如果我有这样的一个查询语句:
复制代码SELECT * FROM SOME_TABLEWHERE 1 IN (1, 2, 3, 4, NULL)
很显然,WHERE 返回 true,这个语句将返回数据,因为 1 在括号列表里是存在的。
但如果这么写:
复制代码SELECT * FROM SOME_TABLEWHERE 1 NOT IN (1, 2, 3, 4, NULL)
很显然,WHERE 返回 false,这个查询不会返回数据,因为 1 在括号列表里存在,但我们说的是“NOT IN”。
但如果我们把语句改成这样呢?
复制代码SELECT * FROM SOME_TABLEWHERE 5 NOT IN (1, 2, 3, 4, NULL)
这里的 WHRE 不会返回数据,因为它的结果不是 true。数字 5 在括号列表里可能不存在,也可能存在,因为当中有一个 NULL 值(数据库不知道 NULL 的值是什么)。
这个 WHERE 会返回 NULL,所以整个查询不会返回任何数据。
希望你们现在都清楚该怎么在 SQL 语句中处理 NULL 值了。
本文地址:https://www.best73.com/news/56845.html
在MySQL中 NULL的含义是_null有哪些常见的意思?(如何正确理解 SQL 中的 NULL)相关推荐
- 正确理解WPF中的TemplatedParent
原文:正确理解WPF中的TemplatedParent http://www.cnblogs.com/mgen/archive/2011/08/31/2160581.html (注:Logical T ...
- python的上下文管理用哪个关键字_正确理解python中的关键字“with”与上下文管理器...
正确理解python中的关键字"with"与上下文管理器 来源:中文源码网 浏览: 次 日期:2018年9月2日 [下载文档: 正确理解python中的关键字&quo ...
- matlab计算正负零序分量,5分钟教你正确理解电力系统中的正序负序零序.doc
5分钟教你正确理解电力系统中的正序负序零序 电力 三相不平衡 作图法 对称分量法 1:三相不平衡的的电压(或电流),可以分解为平衡的正序.负序和零序 2:零序为3相电压向量相加,除以3 3:正序将BC ...
- 正确理解scipy中的coo_matrix函数
正确理解scipy中的coo_matrix函数 1. 构造一个空矩阵 2. 使用ijv(triplet)格式构造一个矩阵 3. 用重复的索引构造矩阵 1. 构造一个空矩阵 这种用法比较简单,直接生成一 ...
- sql如何处理null值_如何正确处理SQL中的NULL值
sql如何处理null值 前言 (Preface) A friend who has recently started learning SQL asked me about NULL values ...
- 如何理解SQL中的自连接?
与点击上方SQL数据库开发,关注获取SQL视频教程 SQL专栏 SQL数据库基础知识汇总 SQL数据库高级知识汇总 说起自连接,想必小伙伴们都听说过.在进行数据处理时经常会使用到自连接,特别是像一些连 ...
- 深入理解 SQL 中的 Grouping Sets 语句
前言 SQL 中 Group By 语句大家都很熟悉,根据指定的规则对数据进行分组,常常和聚合函数一起使用. 比如,考虑有表 dealer,表中数据如下: id (Int) city (String) ...
- 2.如何正确理解古典概率中的条件概率《zobol的考研概率论教程》
写本文主要是帮助粉丝理解考研中的古典概率-条件概率的具体定义. "B事件发生的条件下,A事件发生的概率"? "在A集合内有多少B的样本点"? "在B约 ...
- 正确理解javascript中的Event loop机制
这两个星期一直在想着写一篇关于javascript中event Loop的文章.自从写完上一篇<Javascript捕捉(capturing)与冒泡(bubbling)的区别>之后,我抛出 ...
最新文章
- Velodyne VLP-16激光雷达数据分析
- (转)教你实现Winform窗体的四边阴影效果
- STM32F405的 ADC参考电压选择问题
- 运筹学的课程笔记 markov decision process
- 如何区分Oracle的数据库,实例,服务名,SID
- 「数据库系列四」分布式数据库CAP理论与最终一致性
- TCP/IP GUIDE
- upc 组队赛18 STRENGTH【贪心模拟】
- JS根据文本框内容匹配并高亮显示
- sql查询 关联帖子_MySQL的大分页查询该如何优化?
- C++新特性探究(18.3):C++11 weak_ptr智能指针
- mysql 分页_百万数据下mysql分页问题
- 凡泰极客:远程办公,你礼貌吗?
- ZigBee 快速入门(协议栈,协调器,路由器,终端设备,加入网络,安全,路由功能,频段)
- 安卓模拟器安装xposed和插件
- 数据安全风险分析及应对策略研究
- LabWindows 读写 Excel
- 先是艾瑞咨询后是腾讯,永洪科技把客户变成了投资人
- php设置pdf下载加密文件,pdf文件加密方法 PDF文件怎样加密 如何给PDF文件添加打开口令...
- 常用crc查表法_请教查表法计算CRC的原理
热门文章
- Windows10下删除需TrustedInstaller权限的目录或文件
- NLTK库来咬文嚼字
- 计算机行业岗位排名,全国“最缺工”100个职业排行,这些专业就业率高,发展前景好...
- 快速省时省事的视频转换器
- 几款工具神器,高效率助你走上人生巅峰
- nsis制作新版迅雷安装界面
- 期货长线交易资金管理(浮赢加仓)?
- 好声音”杨坤组大森蝶晋级 被传与刘珂有恋情
- CSDN日报20170218——《你真的看懂无领导小组面试了吗?》
- iphone手机可不可以运行java_只要一招 就能在iPhone手机上运行安卓系统