MySQL - null

在 SQL 中,NULL 表示“未知”。 也就是说,NULL 值表示的是“未知”的值。

  • NULL = 未知;

在大多数数据库中,NULl 和空字符串是有区别的。

  • 空字符("")串虽然表示“没有值”,但这个值是已知的。
-- 表达式“1=1”一定为 true,查询会返回所有的行。
SELECT * FROM SOME_TABLE WHERE 1 = 1

-- 表达式“1=0”是 false,查询语句不会返回任何数据。
SELECT * FROM SOME_TABLE WHERE 1 = 0

-- 数据库不知道(1 和 NULL)是否相等,会认为“NULL”或“未知”,查询语句不会返回任何数据。
SELECT * FROM SOME_TABLE WHERE 1 = NULL

-- WHERE返回false,查询不会返回任何数据。
SELECT * FROM SOME_TABLE WHERE NOT(1 = 1)

-- WHERE返回true,查询返回所有行。
SELECT * FROM SOME_TABLE WHERE NOT(1 = 0)

-- 数据库首先计算 1=NULL,它不知道 1 是否等于 NULL,因为它不知道 NULL 的值是什么。
-- 计算不会返回 true,也不会返回 false,它会返回一个 NULL。
-- NOT() 会继续解析上一个计算返回的结果,NOT() 遇到 NULL,它会生成另一个 NULL。
SELECT * FROM SOME_TABLE WHERE NOT(1 = NULL)

-- 都不会返回数据,尽管它们是完全相反的。
SELECT * FROM SOME_TABLE WHERE NOT(1 = NULL) 
SELECT * FROM SOME_TABLE WHERE 1 = NULL

null vs not in

-- WHERE 返回 true,这个语句将返回数据,因为 1 在括号列表里是存在的。
SELECT * FROM TABLE WHERE 1 IN (1, 2, 3, 4, NULL)

-- WHERE 返回 false,这个语句不会返回数据,因为 1 在括号列表里是存在的。
SELECT * FROM TABLE WHERE 1 NOT IN (1, 2, 3, 4, NULL)

--  WHERE 不会返回数据,因为它的结果不是 true。数字 5 在括号列表里可能不存在,也可能存在,因为当中有一个 NULL 值(数据库不知道 NULL 的值是什么)。
SELECT * FROM SOME_TABLE WHERE 5 NOT IN (1, 2, 3, 4, NULL)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值