我们先看一下我在网上搜的内容

软件环境: 1、Windows NT4.0+ORACLE 8.0.4 2、ORACLE安装路径为:C:ORANT 含义解释: 问:什么是NULL? 答:在我们不知道具体有什么数据的时候,也即未知,可以用NULL,我们称它为空,ORACLE中,含有空值的表列长度为零。 ORACLE允许任何一种数据类型的字段为空,除了以下两种情况: 1、主键字段(primary key), 2、定义时已经加了NOT NULL限制条件的字段 说明: 1、等价于没有任何值、是未知数。 2、NULL与0、空字符串、空格都不同。 3、对空值做加、减、乘、除等运算操作,结果仍为空。 4、NULL的处理使用NVL函数。 5、比较时使用关键字用“is null”和“is not null”。 6、空值不能被索引,所以查询时有些符合条件的数据可能查不出来,count(*)中,用nvl(列名,0)处理后再查。 7、排序时比其他数据都大(索引默认是降序排列,小→大),所以NULL值总是排在最后。 使用方法: SQL> select 1 from dual where null=null; 没有查到记录 SQL> select 1 from dual where null=''; 没有查到记录 SQL> select 1 from dual where ''=''; 没有查到记录 SQL> select 1 from dual where null is null; 1 --------- 1 SQL> select 1 from dual where nvl(null,0)=nvl(null,0); 1 --------- 1 对空值做加、减、乘、除等运算操作,结果仍为空。 SQL> select 1+null from dual; SQL> select 1-null from dual; SQL> select 1*null from dual; SQL> select 1/null from dual; 查询到一个记录. 注:这个记录就是SQL语句中的那个null 设置某些列为空值 update table1 set 列1=NULL where 列1 is not null; 现有一个商品销售表sale,表结构为: month    char(6)      --月份 sell    number(10,2)   --月销售金额 create table sale (month char(6),sell number); insert into sale values('200001',1000); insert into sale values('200002',1100); insert into sale values('200003',1200); insert into sale values('200004',1300); insert into sale values('200005',1400); insert into sale values('200006',1500); insert into sale values('200007',1600); insert into sale values('200101',1100); insert into sale values('200202',1200); insert into sale values('200301',1300); insert into sale values('200008',1000); insert into sale(month) values('200009');(注意:这条记录的sell值为空) commit; 共输入12条记录

SQL> select * from sale where sell like '%'; MONTH SELL ------ --------- 200001 1000 200002 1100 200003 1200 200004 1300 200005 1400 200006 1500 200007 1600 200101 1100 200202 1200 200301 1300 200008 1000 查询到11记录. 结果说明: 查询结果说明此SQL语句查询不出列值为NULL的字段 此时需对字段为NULL的情况另外处理。 SQL> select * from sale where sell like '%' or sell is null; SQL> select * from sale where nvl(sell,0) like '%'; MONTH SELL ------ --------- 200001 1000 200002 1100 200003 1200 200004 1300 200005 1400 200006 1500 200007 1600 200101 1100 200202 1200 200301 1300 200008 1000 200009 查询到12记录. Oracle的空值就是这么的用法,我们最好熟悉它的约定,以防查出的结果不正确。

自测例子:

1. SELECT COUNT(*) FROM DUAL WHERE '' = NULL; -- count(*)=0

2. SELECT COUNT(*) FROM DUAL WHERE '' IS NULL; -- count(*)=1

3. SELECT COUNT(*) FROM DUAL WHERE '' = ''; --count(*)=0

4. SELECT COUNT(*) FROM DUAL WHERE '''' = ''''; ----count(*)=1

我们先分析一下上面这条第一条sql语句,为什么会是o,我们分析(http://blog.sina.com.cn/s/blog_66b46f5f0100qx1i.html)过后,我们暂且可认为oracle会把null转换为“null”字符串,所以为0;

第二条:我们在看一个例子

SELECT 1 FROM DUAL WHERE '' IS '' 第 1 行出现错误: ORA-00908: 缺失 NULL 关键字

通过上面的例子我们不难看出 IS NULL是Oracle的语法,

我们再看网上的一个例子:

以前我总说空字符串’’等价于NULL,但是有些人喜欢钻牛角尖,所以我改一下说法,空字符串’’是NULL的字符类型的表现格式。

也许有人会认为,NULL就是NULL,本身没有类型的一说,但是我认为,NULL还是有类型的,只不过不同类型的NULL都用相同的关键字NULL来表示。而且,NULL本身也可以转化为任意类型的数据,因此给人的感觉是NULL没有数据类型。

其实NULL不但有数据类型,还有默认的数据类型,那就是字符类型。至于这个答案是如何推断出来的,请看:

不过上面说的这个默认的数据类型是在极限的情况下测试出来的,如果只是给出一个NULL,那么它是可以代表任意的类型的。

证明空字符串就是NULL是很容易的:

SQL> SELECT 1 FROM DUAL WHERE '' = '';

未选定行

SQL> SELECT 1 FROM DUAL WHERE '' IS NULL;

1 ---------- 1

SQL> SELECT DUMP(''), DUMP(NULL) FROM DUAL;

DUMP DUMP ---- ---- NULL NULL

上面三个SQL语句,任意一个都足以证明空字符串’’就是NULL。

有些人可能会说,既然’’就是NULL,为什么不能进行IS ’’的判断呢?

SQL> SELECT 1 FROM DUAL WHERE '' IS ''; SELECT 1 FROM DUAL WHERE '' IS '' *第 1 行出现错误: ORA-00908: 缺失 NULL 关键字

其实从上面的错误信息就可以看到答案。原因就是IS NULL是Oracle的语法,在Oracle运行的时刻’’是NULL,但是现在Oracle还没有运行这句SQL,就由于语法不正确被SQL分析器挡住了。Oracle的语法并不包含IS ’’的写法,所以,这一点并不能称为’’不是NULL的理由。

那么我为什么还要说’’是NULL的字符表示形式呢?因为’’和NULL还确实不完全一样,对于NULL来说,它表示了各种数据类型的NULL值。而对于空字符串’’来说,虽然它也具有NULL的可以任意转化为其他任何数据类型的特点,但是无论是从形式上还是从本质上它都表现出了字符类型的特点。

null和空的区别 oracle,Oracle中NULL与空字符串''的区别的总结相关推荐

  1. Oracle排序中NULL值处理的五种常用方法

    1.缺省处理   Oracle在Order by 时缺省认为null是最大值,所以如果是ASC升序则排在最后,DESC降序则排在最前 2.使用nvl函数   nvl函数可以将输入参数为空时转换为一特定 ...

  2. oracle排名怎么去除空值影响,Oracle排序中null值处理方法讲解

    1.缺省处理 oracle在order by 时缺省认为null是最大值,所以如果是asc升序则排在最后,desc降序则排在最前 2.使用nvl函数 nvl函数可以将输入参数为空时转换为一特定值,如 ...

  3. java null什么意思_浅谈java中null是什么,以及使用中要注意的事项

    1.null既不是对象也不是一种类型,它仅是一种特殊的值,你可以将其赋予任何引用类型,你也可以将null转化成任何类型,例如: Integer i=null; Float f=null; String ...

  4. swing查询输入框无值时出现null异常_如何优雅处理代码中 Null 值引起的 Bug?告别 Null 恐惧症!...

    导语 在笔者几年的开发经验中,经常看到项目中存在到处空值判断的情况,这些判断,会让人觉得摸不这头绪,它的出现很有可能和当前的业务逻辑并没有关系.但它会让你很头疼. 有时候,更可怕的是系统因为这些空值的 ...

  5. python中表示空类型的是_python中什么表示空类型

    python中什么表示空类型? python中None表示空类型.表示该值是一个空对象,空值是Python里一个特殊的值,用None表示.None不能理解为0,因为0是有意义的,而None是一个特殊的 ...

  6. python中表示空类型_在python中什么表示空类型

    在python中None表示空类型.None表示空值,它是一个特殊的Python对象,None的类型是None Type.None在Python解释器启动时自动创建,解释器退出时销毁. None表示空 ...

  7. oracle数据库中nvarchar,Oracle数据库中的varchar,varchar2,nvarchar,nvarchar2区别及用

    [varchar,varchar2 ] 联系: 1. varchar/varchar2用于存储可变长度的字符串 比如 varchar(20),存入字符串'abc', 则数据库中该字段只占3个字节,而不 ...

  8. 解决oracle语句中 含数字的字符串按数字排序问题

    普通排序利用:order by 字段名 ASC 但是遇到有中文而且类型是varchar类型的结果就是这样 政采代(甲)字第0298号 政采代(甲)字第0421号 政采代(甲)字第1098号 政采代(甲 ...

  9. 在linux中 与 的区别,在linux中,和, |和|| , 与 的区别

    对应刚接触linux命令的小伙伴们来说,这些符号一定是很困扰的下面我们一起来看这些符号区别和用法 & 表示任务在后台执行,如要在后台运行 如: [root@localhost local]# ...

  10. java中int和integer的区别_Java异常中throw和throws关键字的区别

    Java中常常弄混的两个关键字,throw和throws,它们有什么区别呢?如何记忆他们,而不至于出错呢? throw和throws 区别 throws:出现在方法的签名中,声明当前方法可能抛出的所有 ...

最新文章

  1. php.ini 中文版第二部分(关于这个配制文件)
  2. Flink中的状态与容错
  3. [ZZ]Debug VBScript with Visual Studio
  4. NGINX生命周期-转
  5. Java EE CDI ConversationScoped示例
  6. 蚂蚁金服开放计算架构:下一代金融级计算架构
  7. QT 015 【数据库】 QSqlTableModel Class
  8. python 字典性质描述_卧槽!Python还有这些特性(2):奇怪的字典
  9. jquery 左右移动 以及使用layer.js弹出框呈现在页面上
  10. [NOIp2008] 双栈排序 (二分图染色 + 贪心)
  11. linux中符号链接啥意思,linux – 为什么我不能在符号链接中使用“...
  12. 刷新按钮_不能忍:用户求微软为Win10 Wi-Fi窗口添加刷新按钮
  13. 黑莓 os6 html5,黑莓OS 6内置浏览器HTML5性能超越其他平台
  14. LeetCode:三个数的最大乘积【628】
  15. PHP学习笔记五(命名空间)
  16. java mapxtreme_MapXtreme Java Edition 4.8使用心得(一)
  17. C语言入门经典(第四版).pdf
  18. mos管的rc吸收电路计算_RC吸收电路参数计算
  19. 计算机网络之数据传输方式:电路交换、报文交换和分组交换
  20. MATLAB之LU分解法(十)

热门文章

  1. Java 的运行机制
  2. SQL Server-【知识与实战IV】多表查询、个数计算、多重约束条件、两表间的交集、多表之间的关系分析
  3. CSDN 如何删除自己不用的分类(亲测有效!)
  4. centos上nginx转发tcp请求
  5. ajax以base64上传图片到django
  6. Ubuntu下安装Samba服务器
  7. [MCSM]随机搜索和EM算法
  8. 关于Adobe AIR 获取屏幕信息及任务栏高度.
  9. HCIE-OSPFV3
  10. java 内存溢出和内存泄漏_java中的内存溢出和内存泄漏