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值,就像有具体值的列一样;
上一篇: el-input 标签中密码的显示和隐藏
下一篇: [NOI2008] 糖果雨
推荐阅读
-
sql server 2008 压缩备份数据库(20g)
-
SQL Server 2005/2008 导入导出数据常见报错解决方法
-
SQL Server 2008服务器角色和数据库角色
-
如何在SQL Server 2005数据库中导入SQL Server 2008的数据
-
连接到SQL Server 2008时,在默认的设置下SQL Server不允许进行远程连接可能会导致此失败(Microsoft SQL Server,错误:1006
-
学生信息管理系统——配置windows防火墙允许访问SQL Server 2008服务器
-
将Session值储存于SQL Server中
-
SQL Server中检查字段的值是否为数字的方法
-
SQL Server存储过程输入参数使用表值
-
sql server2008调试存储过程的完整步骤