文档章节

奇妙的NULL值,你知道多少

彭泽0902
 彭泽0902
发布于 2016/11/24 18:47
字数 1320
阅读 3
收藏 0

《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)

        

     

© 著作权归作者所有

共有 人打赏支持
彭泽0902
粉丝 0
博文 44
码字总数 57771
作品 0
武汉
高级程序员
私信 提问
前端资源系列(5)-JavaScript奇味探索

JavaScript中有很多奇妙的东西,归咎or归功于设计时候的迅速。缺陷有,但是JavaScript的强大确实体现的淋漓尽致。 它是如此的灵活,当然随之而来的便是开发的代价,它不像强类型语言那样规规...

xzavier
2018/08/27
0
0
Android 一起来看看 ThreadLocal

前言 说起 ThreadLocal,大家可能会比较陌生,但是如果想要比较好地理解 Android 的消息机制,ThreadLocal 是必须要掌握的,这是因为 Looper 的工作原理,就跟 ThreadLocal 有很大的关系,理...

developerHaoz
2017/09/24
0
0
Android 一起来看看 ThreadLocal

前言 说起 ThreadLocal,大家可能会比较陌生,但是如果想要比较好地理解 Android 的消息机制,ThreadLocal 是必须要掌握的,这是因为 Looper 的工作原理,就跟 ThreadLocal 有很大的关系,理...

developerHaoz
2017/09/24
0
0
2017年河北省大学生程序设计竞赛 奇妙糖果屋 【二进制+异或】

奇妙糖果屋 Time Limit : 3000/1000ms (Java/Other) MemoryLimit : 65535/32768K (Java/Other) Total Submission(s) : 13 Accepted Submission(s) :11 Problem Description 奇异王国里有很多......

my_sunshine26
2017/11/25
0
0
执行目标文件引发的问题:syntax error: word unexpected (expe...

今天不小心把一个目标文件当成了可执行文件放到开发板上进行执行,结果出现了这样一个问题:./hello_qt: line 1: syntax error: word unexpected (expecting ")"),因为以前没有碰到过这事,...

水海云
2013/03/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Nextjs+React非页面组件SSR渲染

@随风溜达的向日葵 Nextjs Nextjs是React生态中非常受欢迎的SSR(server side render——服务端渲染)框架,只需要几个步骤就可以搭建一个支持SSR的工程(_Nextjs_的快速搭建见Next.js入门)...

随风溜达的向日葵
今天
0
0
如何在 Linux 系统查询机器最近重启时间

在你的 Linux 或类 UNIX 系统中,你是如何查询系统上次重新启动的日期和时间?怎样显示系统关机的日期和时间? last 命令不仅可以按照时间从近到远的顺序列出该会话的特定用户、终端和主机名...

来来来来来
今天
3
0
Redis协议是什么样的

前言 我们用过很多redis的客户端,有没有相过自己撸一个redis客户端? 其实很简单,基于socket,监听6379端口,解析数据就可以了。 redis协议 解析数据的过程主要依赖于redis的协议了。 我们...

春哥大魔王的博客
今天
6
0
乱入Linux界的我是如何学习的

欢迎来到建哥学Linux,咳!咳!咳!开个玩笑哈,我是一个IT男,IT界的入门选手,正在学习Linux。 在之前,一直想进军IT界,学习IT技术,但是苦于没有人指导,也不知道学什么,最开始我自己在...

linuxCool
今天
4
0
携程Apollo统一配置中心的搭建和使用(java)

一.Apollo配置中心介绍 1、What is Apollo 1.1 Apollo简介 Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到...

morpheusWB
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部