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 和空字符串是有区别的。
但并不是所有数据库都这样,例如,Oracle 就不支持空字符串,它会把空字符串自动转成 NULL 值。
在其他大多数数据库里,NULL 值和字符串的处理方式是不一样的:
这就好比我问了一个问题:“美国总统罗斯福的中间名是什么”?
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 一般会有三种结果:
你可能会想:“既然这样,那我为什么要去关心是 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
都不会返回数据,尽管它们是完全相反的。
如果我有这样的一个查询语句:
复制代码
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 值了。
大家是不是和我以前一样,一直在找一款非常好用的祛痘产品。我以前真的是苦苦寻觅,苦苦寻觅。因为脸上的痘痘实在是又多又难看,后来在我和几个闺蜜的推荐和自己使用下,终于找到了几个确实好用的祛痘产品,假如我买...
抖音短视频可以说时下最受年青人喜爱的小视频APP,称它为“总流量水稻收割机”、网络红人出产产业基地一点也不算过。之前的人总期待一夜暴富,现如今就盼着在抖音上一夜爆红!例如抖音西瓜扇漂亮小姐姐凭着一...
跟着经济程度的不绝成长,越来越多的人开始想要创业做加盟项目加盟品牌。飞速成长的时代餐饮行业的成长也长短常繁荣的,那么餐饮行业的成长的确是欣欣向荣的,是各人不容忽视的并且民以食为天,那么餐饮行业的成长形...
不论红包或消费券,皆属特定专项福利,未来能不能持久还需观察,没必要杞人忧天“幸福来得太快、太多。” 福利制度是现代社会的标配,主要目的是帮助失业者等弱势群体脱离困境。况且,多数人是有理想的,不知道谁会...
销售市场多元化的今日,自主创业的项目分析十分重要。一个好的自主创业挑选,能够 为创业人省掉许多自主创业道上的不便。那麼应当该如何选择?现阶段平常人干什么小本买卖挣钱?有什么高盈利爆利可靠的新项目非常值...
自适应视图的意思是,欣赏器宽度、高度差异时,就显示条件匹配的视图页面内容,本文给各人讲讲手机移动端自适应视图。 Axure 8 自带自适应成果,可以自适应电脑、平板、手机等差异巨细的屏幕。 要完成手...