《NULL值的多义性分析》

谈到NULL值,很多人都是很熟悉,但是深入了解后,又感觉到陌生,对其含义和用法,都无法很准确的理解。NULL在数据库和编程语言中,存在的意义和附带的含义不同。

NULL这个概念,在数据库中产生的时候就存在异议。NULL值的意义现在主流的想法为:“未知值或不确定的值”。至于是否应该被视为未知值或不确定的值,存在较大的争议。

NULL值在编程语言中的意思为“空的引用”,即变量只是申明了,但没有实例化,在内存中没有分配内存。

由于NULL值在编程语言和数据库中的含义存在差异,导致对NULL值很难把握,现在就来谈一下NULL值在数据库中的含义和在编程语言中的含义和用法。

一.NULL值在数据库中的含义与用法:

1.NULL值在数据库中的含义:

NULL值既不是为零,也不是空白,NULL值实际是指未知值或不确定值,缺少的数据。

2.NULL值的用法:

NULL在数据库中的含义是不确定的,这样可以使数据库操作人员区分故意记录为零的数据及在系统中未记录的数据,或者特意输入NULL的数据。

3.NULL值的不确定性所带来的作用:

(1)在(值的)计算或比较中不能使用它。

(2)NULL值相互之间并不相等,因此NULL之间无法比较大小。(类似于数学中的无穷大之间的比较)

(3)在计算类似AVG、SUM、MAX COUNT这样的聚合函数时,会忽略包含NULL值的列。

(4)在查询GROUP BY子句中出现包含NULL值的列时,查询输出中仅有一行包含NULL值。

4.各种数据库平台对NULL的处理方式:

(1)在oracle数据库中,一个NULL字符串,是以NULL值插入的。

(2)在SQL Server、MySQL等数据库中,是以VARCHAR和CHAR列中插入空字符串。

二.NULL值在编程语言中含义和用法:

NULL值在编程语言中的含义与用法(主要编程语言:C#,JAVA等面向对象的语言)

1.面向对象的编程语言中(主要编程语言:C++,C#,JAVA)类型的划分:

面向对象的编程语言中将数据类型划分为:值类型和引用类型。(都可以为泛型类型)

(备注:C++,C#具有第三种类型:指针类型)

说明:值类型和引用类型的区别---值类型的变量直接包含了它们的数据,引用类型的变量只保存了指向它们数据的引用,数据通常也称为对象。(任何类型的值都可以被当作是一个对象)

2.编程语言中的NULL含义:

空的引用(变量只定义了,但未赋值),NULL与所有的引用类型都是兼容的,代表缺失某个实例。

3.数据类型中的NULL值意义:

(1).值类型:只要是可空值类型的值类型的值类型变量都可以包含NULL值;对于不可为空值的值类型,则有一个对应的可空值类型表示了和它相同的值的集合加上NULL值。

(2).Bool类型:在C/C++中,一个整数零或者浮点数零,或空指针,都可以表示成布尔值false,相反则为true;在c#和java中,转换必须通过显示地将整数或浮点数值和零比较,或者显示地比较对象引用和NULL;

(注:在比较NULL的时候,非布尔值不能转换成布尔值。)

(3).引用类型:引用类型的值是一个指向某个类型实例的引用,这个实例叫做对象,特殊只NULL和所有的引用类型都是兼容的,代表缺失某个实例。

4.NULL值在编程语言中的意义:

(1).空对象:是一种变体称为空迭代器模型式,它使得在组合层次结构中遍历各个节点的操作对客户端透明(客户端可以使用相同的逻辑来遍历组合和叶子节点)

(2).空对象的意义:最有用的地方在于它更靠近数据,因为对象表示的是问题空间内的实体。

三.NULL值在编程语言和数据库之间数据操作处理:

1.编程语言中的数据如何写入数据库:

(1).在通过数据库连接(java中使用JDBC,C#应用对应的数据源连接数据库),在连接成功后,获取数据库中的数据,SQL中的NULL被映射到Java(C#)中的null。这可能会导致人们认为类似Java(C#)中null==null的情况,SQL中也存在NULL= NULL。

2.编程语言如何从数据库中取出值,判断是否为NULL:

(1).将取出的数据转化为字符串类型,然后进行判断。

(2).利用语言提供的方法判断。(C#中使用DBNull或isnull)

奇妙的NULL值,你知道多少的更多相关文章

  1. oracle 关于null值排序

    在oracle中根据字段来desc排序的话null值可能会在数据的最前面.然而有时候我们查看数据的时候并不希望能够在前面看到这些null值的排序数据. 因此我查了一下: 1.排序的时候运用nvl(). ...

  2. SQL中NULL值

    SQL的表达式,除了IS NULL和NOT NULL以外,只要出现NULL值结果都为FALSE 简单的例子: SELECT * FROM table WHERE name!='abc' 只要name值 ...

  3. 关于null值的排序

    关于空值null的排序问题   Oracle排序中NULL值处理的五种常用方法: 1.缺省Oracle在Order by 时缺省认为null是最大值,所以如果是ASC升序则排在最后,DESC降序则排在 ...

  4. SQL Server表分区的NULL值问题

    SQL Server表分区的NULL值问题 SQL Server表分区只支持range分区这一种类型,但是本人觉得已经够用了 虽然MySQL支持四种分区类型:RANGE分区.LIST分区.HASH分区 ...

  5. TSQL 聚合函数忽略NULL值

    max,min,sum,avg聚合函数会忽略null值,但不代表聚合函数不返回null值,如果表为空表,或聚合列都是null,则返回null.count 聚合函数忽略null值,如果聚合列都是null ...

  6. mysql null值处理详细说明

    在讲null之前,我们先看一个例子 表数据如下: 3306>select * from t1; +------+-------+ | id | name | +------+-------+ | ...

  7. SQL SERVER使用ODBC 驱动建立的链接服务器调用存储过程时参数不能为NULL值

    我们知道SQL SERVER建立链接服务器(Linked Server)可以选择的驱动程序非常多,最近发现使用ODBC 的 Microsoft OLE DB 驱动程序建立的链接服务器(Linked S ...

  8. SQL NULL 值【摘自W3C】

    SQL NULL 值 本章讲解 IS NULL 和 IS NOT NULL 操作符. NULL 值是遗漏的未知数据.默认地,表的列可以存放 NULL 值. 如果表中的某个列是可选的,那么我们可以在不向 ...

  9. not子查询中有null值的时候 not in 会失效

    not in子查询中有null值的时候 not in 会失效 但是 in 的子查询中有null的 不会失效

随机推荐

  1. nodejs学习之加密

    Nodejs中的加密是Crypto模块, 1.md5的使用 var crypto = require("crypto"); //创建 var md5 = crypto.create ...

  2. Devexpress Ribbon

    http://www.cnblogs.com/liwei81730/archive/2011/12/21/2296203.html 可查看此处.

  3. JQuery的父、子、兄弟节点查找方法

    jQuery.parent(expr)           //找父元素 jQuery.parents(expr)          //找到所有祖先元素,不限于父元素 jQuery.children ...

  4. SQL Server2008附加数据库之后显示为只读时解决方法

    啰嗦的话就不多说了,直入主题吧! 方案一: 碰到这中情况一般是使用的sa账户登录的,只要改为Windows身份验证,再附加数据库即可搞定. 方案二: 使用sa登录SQL Server2008附加数据库 ...

  5. C#用扩展方法进行自动生成添加删除对象转换的功能

    public static class ExtendedModel { #region 实体类的增删改查 #region 添加 public static string AddStr(this obj ...

  6. ★★★Oracle sql 传参特别注意★★★

    最近遇到一个非常烦人的问题,用传参的方式执行sql语句结果老是报 Oracle ORA-01722: 无效数字 一直无法找到原因. 表结构大致如下: table test_station ( tblR ...

  7. poj3187-Backward Digit Sums(枚举全排列)

    一,题意: 输入n,sum,求1~n的数,如何排列之后,相邻两列相加,直到得出最后的结果等于sum,输出1~n的排列(杨辉三角)  3 1 2 4 //1~n 全排列中的一个排列  4 3 6  7 ...

  8. 在windows上如何安装python web引擎jinja2

    首先要把你的Python文件夹加到环境变量里头去.假设你的Python文件夹位于C:\Python34,那么你需要打开CMD并输入: SETX PATH "%path%;C:\Python3 ...

  9. java中类的加载情况

    当一个类存在继承且与其他类有关联情况时,类中各模块加载顺序如下: 1.首先找到public类,判断该类是否继承其他类,如果没有继承其他类(Object类除外),则加载该类:否则转去加载该类的超类,超类 ...

  10. RESTful API 设计最佳实践

    背景 目前互联网上充斥着大量的关于RESTful API(为了方便,以后API和RESTful API 一个意思)如何设计的文章,然而却没有一个"万能"的设计标准:如何鉴权?API ...