SQLite空值与NULL值

时间:2018-08-29 11:59:53

标签: sqlite

我创建了一个名为M_PRODUCT的表,该表具有3个字段

ID : INTEGER, Primary key, NOT NULL
Name: TEXT
Price: INTEGER

我将3条记录插入到新创建的表中

ID | Name | Price
1  | A    | NULL
2  | B    | 300
3  | C    | <blank>

当我尝试执行以下SQL查询时

SELECT * FROM M_PRODUCT WHERE M_PRODUCT.PRICE > 200

我有2条记录

ID | Name | Price
2  | B    | 300
3  | C    | <blank>

似乎NULL等于0,因此名称为A的记录不满足条件。

但是我不明白为什么空白价格行可以进入返回结果。

空白会转换为特殊值吗?

1 个答案:

答案 0 :(得分:0)

为了详细说明我的评论,comparing values的规则如下:

  

具有存储类NULL的值被认为小于任何其他值(包括具有存储类NULL的另一个值)。

     

INTEGER或REAL值小于任何TEXT或BLOB值

表示TEXT或BLOB值大于任何INTEGER或REAL。因此,当您测试M_PRODUCT.PRICE > 200时,TEXT <blank>大于INTEGER 200,因此该行匹配。而且您的NULL值当然比其他任何值都要小,因此不匹配。