尚无检索出一条记下

true

null

null

expert_details中检索出修改人modifier为空的那些记录,因为该字段的类型为varchar2(20),我使用的sql语句为
复制代码 代码如下:select * from expert_details twhere t.modifier = ”

true

澳门新葡8455最新网站,false

false

没有检索出一条记录,而这与存储在该表中的记录是不相符的。后来想到即便是空字符型存储在数据库教程中也应该是null而不是”。

null

最后我想到了sql中的null 值测试。使用如下语句,终于检索出了想要的结果。
复制代码 代码如下:select * from expert_details t where t.modifier is
null

null

表3 not的真值表

false

true

表2 or的真值表

true

false

null

false

null

false

同样,a in(b,c,d) 等价于 oror,
根据真值表,只要这三个表达式中有一个为null,结果返回肯定是null。

a between b and c 等价于 (a=b) and (a=c),因此根据真值表可以得出between
子句中处理null值的规则。

true

null

true

true

null

false

true

false

false

null

因此必须明确使用null值测试即 字段 is null 或者其否定形式 字段 is not
null 来检测null值。

null

表1 and的真值表

然后我使用下列sql 语句,仍然没有检索出一条记录。 复制代码
代码如下:select * from expert_details t where t.modifier = null

当两个以上的查询条件与and、or、not组合时,not的优先级最高,其次是and,最后是or。为了避免歧义和确保可移植性最好使用括号。

true

以下是sql中and,or,not的真值表。

sql 中有null 值测试,即:字段 is (not) null
,但它的返回结果只有两种情况:true或者false。

null

true

因此,between子句和in子句并不增加sql语句的表达能力。

true

null

true

false

false

false

在sql语句中,where 子句:where t.modifier = null
,这里不可以使用null关键字,因为它不是一个真正的值,它仅仅是一个符号,因为它的值是未知的。当t.modifier本身就是null时,即where子句为:where
null= null
,当等号两边的值都是未知的时候,结果是true还是false,sql不能给出一个明确的结果,所以查询出的结果也为null。

相关文章

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图