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 列应该是一个空字符串 。
但只要记住 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(这个时候会返回数据);
- 【null有哪些常见的意思?(如何正确理解 SQL 中的 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 。
所以,这个语句会返回数据 。
- 谷爱凌领衔,中国雪上项目冬奥会有多个夺金点
- 冰丝带将产生14金 宁忠岩有望改写中国男子速滑史
- 河南许昌:所有人员非必要不离市
- 新华社:恒大问题处置迈出关键一步,有利于维护各方权益
- 大爷大妈硬核相亲火爆出圈,有些甚至成了年轻网友的下饭剧
- 冬奥鲜探8|这个场馆里没有一处门槛,将最佳观赛席留给残障人群
- 大爷大妈硬核相亲节目火爆出圈 有大爷已参加过三次
- 河北工程大学回应疑似有学生虐猫:学校高度重视
- 唐山面包车大雾中冲入河里 6人遇难 事发时当地有大雾
- 大妈上海坐拥90套房106个车位?有人去查这事儿了