码迷,mamicode.com
首页 > 数据库 > 详细

关于数据库中的三值逻辑(Tree-Value-Logic)

时间:2014-10-28 00:35:09      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:io   数据   on   log   数据库   sql   技术   编程   不同的   

  在sql中,逻辑表达式(也叫做谓词),可以有三种值:True、False、Unknown,这就是所谓的三值逻辑,,是sql的特有属性。

  在大多数编程语言中,逻辑表达式只有两个值,就是True和False,但是在sql中,还有Unknown。Unknown一般出现在含null的逻辑表达式中,比如下面的情况:NULL>2、NULL+X>Y、NULL=NULL。得到的结果都是Unknown。NULL这个符号代表一种缺失的值,当把一个缺失的值和另外的值拿来比较的时候,就会得到Unknown的结果。

  在某些时候,Unknown和NULL在处理上很容易混淆,比如下面的情况:not true等于false,not false等于true,但是Unknown的反面还是Unknown。

  在不同的语言元素中(也就是在sql语句中,不同的模块),Unknown逻辑结果和NULL处理方式也不相同。

    1、在查询筛选器中(on、where、having)都把Unknown当做false来处理

    2、在Check约束中,Unknown则被当做true对待,比如在表中某字段有Check约束,那么这个表不可能含有2行甚至以上的该字段值为Unknown的行。

    3、在筛选器中,如果比较两个NULL值,虽然得到的值是Unknown,但是还是会当做False来处理。

    4、在Unique约束、集合运算(如Union和Except)、排序、分组操作中,认为两个NULL值是相等的。

      ⑴这样一来,在有Unique约束的列中,无法向表中插入该列值为NULL的两行

      ⑵group by子句会将所有的null值分到一组,同理order by子句会将所有值为NULL的数据排列到一起

      ⑶当比较两个集合中的行时,集合运算符认为不同的NULL值是相等的。

  基本上阅读《技术内幕-T-SQL》一书得到的笔记,如有错误请指正,谢谢。

关于数据库中的三值逻辑(Tree-Value-Logic)

标签:io   数据   on   log   数据库   sql   技术   编程   不同的   

原文地址:http://www.cnblogs.com/ReBack2010/p/4055400.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!