sql server 2008 NULL值
sql支持用null符号来表示缺少的值,它使用的是三值谓词逻辑,计算结果可是以ture、false或unknown。
sql中不同语言元素处理null和unknown的方式也有所不同,如果逻辑表达式只涉及已经存在的值,那么最终的计算结果只有二种,要么true要么false。但是当逻辑表达式涉及缺少的值时,其计算结果就是unknown。如,当谓词salary>0:当salary等于1000时,表达式结果为true,查询过滤条件(where和having子句)能够让表达式计算结果为true的那些行或组被返回;当salary等于-100时,表达式计算结果为false,查询过滤条件(where和having子句)能够让表达式计算结果为false的那些行或组被返回;当salary是null时,表达式的计算结果就是unknown,查询过滤条件(where和having子句)不返回任何行。
在不同的语言元素中,sql对unknown的处理也有所不同。sql对查询过滤条件处理的正确定义是:“接受true”就意味着要过滤掉false和unknown。反之,对sql对check约束处理的正确定义是:“拒绝false”就意味着接受true和unknown。如果sql使用的是二值谓词逻辑,那么“接受true”和“拒绝false”就不会有什么区别。但在三值谓词逻辑中,“接受true”则会拒绝unknown和false,而拒绝false则会接受unknown和true。前面的例子使用了谓词salary>0,一个取值为null的salary将导致表达式计算结果为unknown。如果这个谓词出现在查询的where子句中,则salary列取值为null的行也将会过滤掉。如果在表的check约束中也包含这个谓词条件,则salary列取值为null的行也将被过滤掉。
unknown对它取反时,结果还是unknown。两个null值进行比较的表达式,其计算结果还是unknown。因为null值代表一个缺少的值或不可知的值,为此sql提供了两个谓词is null和is not null,用来取代=null和<>null。
在用于比较和排序目的的不同元素中,sql处理null的方式也有所不同,一些元素认为两个null值彼此相等,而另一些则认为这它们不相等。
例如,当进行分组和排序时,认为二个null值是相等的。也就是说group by子句会在每个组中重新组织所有的null值,就像有具体值的列一样;
推荐阅读
-
一条命令解决: sql server 2008 安装提示重启计算机
-
sql server 2008 用户 NT AUTHORITY\IUSR 登录失败的解决方法
-
sql server连接不上怎么办 SQL Server2008R无法登录的解决方案(1814\18456)
-
SQL Server 2008初次启动
-
SQL Server 2008
-
一条命令解决: sql server 2008 安装提示重启计算机
-
sql server连接不上怎么办 SQL Server2008R无法登录的解决方案(1814\18456)
-
sql server 2008 用户 NT AUTHORITY\IUSR 登录失败的解决方法
-
SQL Server允许重复空字段不空字段值唯一
-
C#连接到sql server2008数据库的实例代码